From 79baf085cd1c131781e449facc9fd12febb85472 Mon Sep 17 00:00:00 2001 From: xne998808-ai Date: Wed, 10 Jun 2026 11:32:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(landing-page):=20agent=20design=20pages=20?= =?UTF-8?q?=E2=80=94=20rich=20layout,=20hero=20illustrations,=20and=20full?= =?UTF-8?q?=20localization=20(#3972)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(landing-page): add agent detail pages for top coding agents Build the first batch of per-agent detail pages under /agents/ for Claude Code, Codex, Cursor, and OpenCode, and turn the /agents/ hub into a supporting page that links into them. Each page renders from copy.agentGuides[slug]: a TL;DR, what-the-agent-is section, design patterns, real externally-sourced resource links, a with-Open-Design drive section, and an FAQ backed by FAQPage JSON-LD. en is hand-written and zh is hand-reviewed; the remaining locales reuse the en guide via the compact-locale fallback so no locale renders undefined. Targets long-tail intent like "claude code for design", "codex design", "cursor for designers", and "opencode design". * feat(landing-page): upgrade the Codex agent page to a rich long-form layout Replace the compact /agents/codex/ page with /agents/codex-design/, an opt-in long-form layout: a product-led hero band + CTA, an on-this-page TOC, deep how-to sections mixing prose, steps, code, comparison tables, and three custom illustrations, plus an expanded FAQ backed by FAQPage JSON-LD. The route carries the "design" keyword to target "codex design" and "codex for design" intent; the /agents/ hub now links there. The rich layout is gated behind an optional `rich` payload on copy.agentGuides[slug]: pages without it keep the compact shape, so this doubles as the template other agent pages can opt into later. en is hand-written and zh is hand-reviewed; the remaining locales reuse the en guide via the compact-locale fallback so none renders undefined. * feat(landing-page): rework agent pages into a single-column rich layout with hero illustrations Replace the two-column hero band with one centered full-measure column so the heading, hero banner, and body all share a single left and right edge, instead of stranding prose in a narrow left-aligned column while the heading wrapped mid-word. Widen the body to fill the measure and justify it. Drop the inherited 70ch max-width caps that were also catching the solution-page how-to steps, FAQ list, and template/system grids, so they fill the section width instead of stranding at ~707px on /solutions/ pages. Swap the placeholder line-art for warm editorial hero illustrations whose central hub carries the agent's real mark (the official OpenAI Codex emblem fused into the artwork), so the page is identifiable at a glance rather than relying on a pasted-on logo badge. * feat(landing-page): add Cursor, Claude Code, and OpenCode design pages and localize all agent pages Add rich long-form detail pages for Cursor, Claude Code, and OpenCode that mirror the Codex page: a hand-structured how-to (what the agent is, why it is good at design, setup, the screenshot/preview loop, Figma, a comparison table, pitfalls, and how Open Design wraps it), an FAQ with JSON-LD, and a hero illustration with the agent's real logo fused into the artwork. Rename the per-agent routes to the `/agents/-design/` form to capture " design" search intent, point the /agents/ hub at them via DETAIL_ROUTES, and remove the old compact routes. Localize the agent guides across every landing locale. The new agent-guides.i18n.ts builds per-locale guides by spreading the English copy (so non-rendered compact fields stay type-complete) and overriding the rendered fields plus the long-form rich payload with translations; it is wired into compactInfoPageCopy so a compact locale renders fully localized agent pages instead of falling back to English. en and zh are authored directly; the other 16 locales are machine-translated and welcome native review. * feat(landing-page): surface agent pages in the nav and flatten the /agents/ hub Add the four agent design pages (Codex, Cursor, Claude Code, OpenCode) under AMR in the header's Agent dropdown, so they are reachable from the top nav and not only from the hub. Brand names are locale-invariant, so they are listed directly while the routes stay in lockstep with the hub's DETAIL_ROUTES. On the /agents/ hub, drop the first-party / supported / community tier split and list all adapters in one grid under a single description, and tighten the section rhythm so the long run of short sections reads less airy. * fix(landing-page): emit locale-correct JSON-LD URLs on agent pages The agent detail pages' BreadcrumbList and Article JSON-LD hard-coded the English /agents// URLs, so every localized route (e.g. /ja/agents/codex-design/) emitted structured data pointing back to the English document — contradicting the locale-specific canonical, hreflang, and the layout already emits. Build the JSON-LD URLs from the localized path instead, on all four detail pages. Also point the /agents/ hub ItemList at each agent's dedicated leaf page (/agents//) instead of the in-hub #slug anchor when one exists, so the structured data matches the cards' real link targets. * fix(landing-page): localize the /agents/ hub JSON-LD URLs too The hub's BreadcrumbList and ItemList structured data still emitted English /agents/... URLs on the localized /[locale]/agents/ routes, contradicting the locale-specific canonical the layout renders. Build them from the localized path (href / Astro.url.pathname) so the metadata matches the rendered route, mirroring the detail-page fix. * fix(landing-page): scope prose-list coral markers away from layout components The .solution-page .info-section ul/ol normalization added a coral dash / counter ::before and an indent to every list under a solution section, which double-numbered the FAQ (.faq-list) and how-to steps (.solution-steps) on top of their own indices, and prepended a stray coral dash that shifted the template / system gallery cards (.solution-tpl-grid / .solution-system-grid). Keep the list-style reset broad but apply the marker + indent only to plain prose lists, excluding those four components. * fix(landing-page): split localized agent guides under the blob-size guard The single agent-guides.i18n.ts (~1.4 MB of machine-translated agent copy for 16 locales) tripped the repo's 1 MiB changed-file blob guard. Split the data into four part files (~350 KB each) merged by a thin index, keeping the same buildLocalizedAgentGuides API and behavior. * fix(landing-page): redirect old /agents// routes to the -design pages The agent detail pages were renamed from /agents// to /agents/-design/ and the old generators removed. Add 301 redirects (root and locale-prefixed) so any inbound link or indexed URL for the old paths transfers to the new page instead of 404ing. --------- Co-authored-by: Joey <276262049+xne998808-ai@users.noreply.github.com> --- apps/landing-page/app/_components/header.tsx | 21 +- apps/landing-page/app/agent-guides.i18n.ts | 28 + .../app/agent-guides.part-a.i18n.ts | 186 ++ .../app/agent-guides.part-b.i18n.ts | 186 ++ .../app/agent-guides.part-c.i18n.ts | 186 ++ .../app/agent-guides.part-d.i18n.ts | 186 ++ apps/landing-page/app/info-page-i18n.ts | 1918 +++++++++++++++++ .../agents/claude-code-design/index.astro | 12 + .../[locale]/agents/codex-design/index.astro | 12 + .../[locale]/agents/cursor-design/index.astro | 12 + .../agents/opencode-design/index.astro | 12 + .../agents/claude-code-design/index.astro | 301 +++ .../app/pages/agents/codex-design/index.astro | 302 +++ .../pages/agents/cursor-design/index.astro | 301 +++ .../landing-page/app/pages/agents/index.astro | 59 +- .../pages/agents/opencode-design/index.astro | 301 +++ apps/landing-page/app/sub-pages.css | 237 +- apps/landing-page/public/_redirects | 14 + .../claude-code-design-hero.webp | Bin 0 -> 127742 bytes .../claude-code-design-setup-flow.webp | Bin 0 -> 88372 bytes .../claude-code-design-taste-triangle.webp | Bin 0 -> 115772 bytes .../codex-design/codex-design-setup-flow.webp | Bin 0 -> 88372 bytes .../codex-design-taste-triangle.webp | Bin 0 -> 115772 bytes .../codex-design-workflow-loop.webp | Bin 0 -> 110954 bytes apps/landing-page/public/agents/codex.svg | 1 + .../cursor-design/cursor-design-hero.webp | Bin 0 -> 167080 bytes .../cursor-design-setup-flow.webp | Bin 0 -> 88372 bytes .../cursor-design-taste-triangle.webp | Bin 0 -> 115772 bytes .../opencode-design/opencode-design-hero.webp | Bin 0 -> 132992 bytes .../opencode-design-setup-flow.webp | Bin 0 -> 88372 bytes .../opencode-design-taste-triangle.webp | Bin 0 -> 115772 bytes 31 files changed, 4248 insertions(+), 27 deletions(-) create mode 100644 apps/landing-page/app/agent-guides.i18n.ts create mode 100644 apps/landing-page/app/agent-guides.part-a.i18n.ts create mode 100644 apps/landing-page/app/agent-guides.part-b.i18n.ts create mode 100644 apps/landing-page/app/agent-guides.part-c.i18n.ts create mode 100644 apps/landing-page/app/agent-guides.part-d.i18n.ts create mode 100644 apps/landing-page/app/pages/[locale]/agents/claude-code-design/index.astro create mode 100644 apps/landing-page/app/pages/[locale]/agents/codex-design/index.astro create mode 100644 apps/landing-page/app/pages/[locale]/agents/cursor-design/index.astro create mode 100644 apps/landing-page/app/pages/[locale]/agents/opencode-design/index.astro create mode 100644 apps/landing-page/app/pages/agents/claude-code-design/index.astro create mode 100644 apps/landing-page/app/pages/agents/codex-design/index.astro create mode 100644 apps/landing-page/app/pages/agents/cursor-design/index.astro create mode 100644 apps/landing-page/app/pages/agents/opencode-design/index.astro create mode 100644 apps/landing-page/public/agents/claude-code-design/claude-code-design-hero.webp create mode 100644 apps/landing-page/public/agents/claude-code-design/claude-code-design-setup-flow.webp create mode 100644 apps/landing-page/public/agents/claude-code-design/claude-code-design-taste-triangle.webp create mode 100644 apps/landing-page/public/agents/codex-design/codex-design-setup-flow.webp create mode 100644 apps/landing-page/public/agents/codex-design/codex-design-taste-triangle.webp create mode 100644 apps/landing-page/public/agents/codex-design/codex-design-workflow-loop.webp create mode 100644 apps/landing-page/public/agents/codex.svg create mode 100644 apps/landing-page/public/agents/cursor-design/cursor-design-hero.webp create mode 100644 apps/landing-page/public/agents/cursor-design/cursor-design-setup-flow.webp create mode 100644 apps/landing-page/public/agents/cursor-design/cursor-design-taste-triangle.webp create mode 100644 apps/landing-page/public/agents/opencode-design/opencode-design-hero.webp create mode 100644 apps/landing-page/public/agents/opencode-design/opencode-design-setup-flow.webp create mode 100644 apps/landing-page/public/agents/opencode-design/opencode-design-taste-triangle.webp diff --git a/apps/landing-page/app/_components/header.tsx b/apps/landing-page/app/_components/header.tsx index 1df83cd40f..7686190022 100644 --- a/apps/landing-page/app/_components/header.tsx +++ b/apps/landing-page/app/_components/header.tsx @@ -302,10 +302,11 @@ export function Header({ {/* - Agent — for now this dropdown lists only AMR (the design Agent). - The 17 first-party coding-agent adapters and their per-agent - /agents/ hub anchors are intentionally held back for a later - pass; the trigger already links to the /agents/ hub. + Agent — AMR (the design Agent) heads the dropdown, followed by the + coding agents that have a dedicated long-form design page. Brand + names are locale-invariant, so they are listed here directly; the + routes stay in lockstep with DETAIL_ROUTES on the /agents/ hub. The + trigger still links to the /agents/ hub. */}
  • {productMenuCopy.amrBlurb}
  • + {[ + { route: 'codex-design', name: 'Codex' }, + { route: 'cursor-design', name: 'Cursor' }, + { route: 'claude-code-design', name: 'Claude Code' }, + { route: 'opencode-design', name: 'OpenCode' }, + ].map((agentItem) => ( +
  • + + {agentItem.name} + +
  • + ))} {/* diff --git a/apps/landing-page/app/agent-guides.i18n.ts b/apps/landing-page/app/agent-guides.i18n.ts new file mode 100644 index 0000000000..cde873ef13 --- /dev/null +++ b/apps/landing-page/app/agent-guides.i18n.ts @@ -0,0 +1,28 @@ +/* + * Localized agent-guide copy for the landing-page agent detail pages. + * + * en + zh live directly in info-page-i18n.ts. Every other landing locale + * gets its agent pages from the part files here (split to stay under the + * repo changed-file blob guard). buildLocalizedAgentGuides() spreads the + * English guide first then overrides with the translation; it is wired into + * compactInfoPageCopy so a compact locale renders fully localized agent + * pages instead of falling back to English. Machine-translated; native + * review welcome. + */ +import type { InfoPageCopy } from './info-page-i18n'; +import type { LandingLocaleCode } from './i18n'; +import { localizedAgentGuidesPartA } from './agent-guides.part-a.i18n'; +import { localizedAgentGuidesPartB } from './agent-guides.part-b.i18n'; +import { localizedAgentGuidesPartC } from './agent-guides.part-c.i18n'; +import { localizedAgentGuidesPartD } from './agent-guides.part-d.i18n'; + +type Guides = NonNullable; + +export function buildLocalizedAgentGuides(en: Guides): Partial> { + return { + ...localizedAgentGuidesPartA(en), + ...localizedAgentGuidesPartB(en), + ...localizedAgentGuidesPartC(en), + ...localizedAgentGuidesPartD(en), + }; +} diff --git a/apps/landing-page/app/agent-guides.part-a.i18n.ts b/apps/landing-page/app/agent-guides.part-a.i18n.ts new file mode 100644 index 0000000000..10b189eece --- /dev/null +++ b/apps/landing-page/app/agent-guides.part-a.i18n.ts @@ -0,0 +1,186 @@ +/* + * Localized agent-guide copy (part A) for the landing-page agent detail pages. + * + * Split across part files to stay under the repo's changed-file blob guard. + * Each part spreads the English guide first (so non-rendered compact fields + * stay type-complete) then overrides the rendered fields + rich payload with + * the translation. Machine-translated from English; native review welcome. + */ +import type { InfoPageCopy } from './info-page-i18n'; +import type { LandingLocaleCode } from './i18n'; + +type Guides = NonNullable; + + +export function localizedAgentGuidesPartA(en: Guides): Partial> { + return { + 'zh-tw': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code 做设计 — Open Design", + description: "设计师如何用 Claude Code 做 UI 和网页设计,以及 Open Design 如何把它变成真正的设计 Agent —— 本地优先、自带密钥(BYOK),配套精选 skill 与设计系统库。", + breadcrumb: "Claude Code", + label: "Agent · Claude Code", + heading: "用 Claude Code 做设计。", + lead: "Claude Code 是 Anthropic 的终端编码 Agent。已经有很多人用它做 UI、设计系统和落地页。Open Design 把它接进真正的设计工作流 —— 用你自己的 Anthropic 密钥或 Claude 订阅,所有文件留在本地。", + rich: {"heroCtaLead": "Open Design 把 Claude Code 变成一个本地优先、开源的设计 agent —— 用你自己的 Anthropic key 或 Claude 订阅、你自己的文件,外面再包一层精选的 skill 与设计系统库。", "heroCtaActions": [{"label": "在 Open Design 里使用 Claude Code", "href": "/quickstart/", "variant": "primary"}, {"label": "在 GitHub 上 Star", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "下载桌面应用", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code 被普遍认为是前端品味最好的 coding agent —— 它对界面的推理格外具体,会给出确切的 hex 色值、间距与字号阶梯,并能在大型代码库里跨文件重构 UI 而不丢失主线。但开箱即用时,如果你不给它设计系统、skill 和真实参考,它仍会滑向一种泛泛的样子。这是一份关于如何把 Claude Code 用于 UI、前端与设计系统工作,并将它接入 Open Design 结构化工作流的端到端实战指南。", "本文涵盖 Claude Code 到底是什么、它为何擅长前端、如何从零搭建、CLAUDE.md 与 Skills 工作流、官方的 Figma 往返、它与 Codex 和 Cursor 的对比、让 AI 产出显得套路化的那些坑,以及 Open Design 如何作为开源、本地优先的设计层来补上这道缺口。"], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Claude Code 设计反馈闭环:终端里做出具体设计决策的 agent、渲染 UI 的浏览器,以及一个工作区,由一条反馈箭头回环", "caption": "核心闭环:Claude Code 在终端里推理出具体的 UI 决策,在真实浏览器里渲染并验证,再对照参考不断收敛。"}, "tocLabel": "本页内容", "toc": [{"id": "what-is-claude-code", "label": "Claude Code 究竟是什么"}, {"id": "why-design", "label": "Claude Code 为何擅长设计"}, {"id": "setup", "label": "从零搭建用于设计的 Claude Code"}, {"id": "skills-workflow", "label": "CLAUDE.md 与 Skills 工作流"}, {"id": "figma", "label": "Claude Code + Figma 往返"}, {"id": "vs", "label": "Claude Code vs Codex vs Cursor"}, {"id": "pitfalls", "label": "常见坑与“AI 套路感”"}, {"id": "open-design", "label": "在 Open Design 里用 Claude Code 做设计"}, {"id": "faq", "label": "常见问题"}], "sections": [{"id": "what-is-claude-code", "heading": "Claude Code 究竟是什么", "blocks": [{"kind": "p", "text": "Claude Code 是 Anthropic 的 agentic 编码工具。它读取你的代码库、编辑文件、运行命令、与你的开发工具集成 —— 从自然语言任务出发去规划、编写并验证,而不只是补全几行代码。"}, {"kind": "p", "text": "它有多个共享同一引擎的形态:终端 CLI、面向 VS Code / Cursor / JetBrains 的 IDE 扩展、带可视化 diff 审阅的桌面应用,以及用于长时任务的网页端。你的 CLAUDE.md 文件、设置与 MCP server 在所有形态间通用。"}, {"kind": "steps", "items": [{"label": "指令文件", "body": "Claude Code 在每次会话开始时读取项目根目录下的 CLAUDE.md —— 这正是写入你的设计规范、token 与审阅清单的天然位置。"}, {"label": "Skills", "body": "Agent Skills 把可复用的指令、脚本与资源打包,由 Claude 按需加载,其中就包括 Anthropic 官方的 Frontend Design skill 来注入品味。"}, {"label": "Plan 与 subagent", "body": "它能先规划再动手,并可派生 subagent 并行处理任务的不同部分,从而让大型 UI 重构保持连贯。"}]}, {"kind": "ul", "items": ["厂商:Anthropic", "凭证:Anthropic API key(BYOK,经 Console)或 Claude 订阅(Pro / Max)", "形态:终端 CLI、VS Code / Cursor / JetBrains 扩展、桌面应用、网页端"]}]}, {"id": "why-design", "heading": "Claude Code 为何擅长设计", "blocks": [{"kind": "p", "text": "在一众 coding agent 里,Claude Code 在前端工作上以“有品味”著称。原因有几点。"}, {"kind": "steps", "items": [{"label": "决策具体,不含糊", "body": "Claude Code 倾向于落到确切的选择 —— 精确的 hex 色值、间距阶梯、字号 ramp 与组件层级,而不是泛泛而谈,而这正是真实界面与占位草稿的分水岭。"}, {"label": "理解代码库的推理", "body": "凭借较大的工作上下文,它能一次性跨多文件重构 UI,复用你已有的组件与 token,而不是另造一套一次性样式。"}, {"label": "官方前端 skill", "body": "Anthropic 提供 Frontend Design skill,让 Claude 先写出设计方向,并刻意避开泛用系统字体与可预料的紫色渐变。"}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "展示设计系统、skill 与参考图三者汇聚成优质设计产出的示意图", "caption": "品味来自你提供的三项输入:设计系统、skill,以及真实参考图。"}, {"kind": "p", "text": "这和 Anthropic 对自家模型的说法一致:Claude 默认并没有品味 —— 放任不管,它会收敛到网页设计的统计中心(Inter、紫色渐变、柔和阴影)。给它约束,它才能产出好设计。Open Design 恰恰把这些输入打包好了,这也是两者天然契合之处(详见下文)。"}]}, {"id": "setup", "heading": "从零搭建用于设计工作的 Claude Code", "blocks": [{"kind": "p", "text": "下面是从一台干净机器到一个能构建并验证 UI 的 Claude Code 的完整路径。"}, {"kind": "code", "lang": "bash", "code": "# 1. 安装 Claude Code(推荐原生安装)\ncurl -fsSL https://claude.ai/install.sh | bash\n# 或:brew install --cask claude-code\n# Windows PowerShell:irm https://claude.ai/install.ps1 | iex\n\n# 2. 在你的项目里启动,首次运行时登录\ncd your-project\nclaude # 用 Claude 订阅或 API key 登录\n\n# 3. 生成项目上下文\n/init # 为本项目创建 CLAUDE.md\n\n# 4. 添加官方 Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. 接入 Figma MCP server(可选,用于设计交付)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "五步搭建流程:安装、认证、配置 CLAUDE.md、添加 skill、验证", "caption": "搭建顺序:安装 → 认证 → 配置 CLAUDE.md → 添加 Frontend Design skill → 启用浏览器验证。"}, {"kind": "steps", "items": [{"label": "把设计规则写进去", "body": "把你的 token、基础原语与约定放进 CLAUDE.md 并让 Claude 指向它们,这样产出会贴合品牌,而不是退回到泛用样子。"}, {"label": "加上浏览器验证", "body": "接入 Playwright 或 Chrome MCP,让 Claude 在真实浏览器里渲染,并跨断点检查产出,而不仅仅确认构建通过。"}]}]}, {"id": "skills-workflow", "heading": "CLAUDE.md 与 Skills 工作流", "blocks": [{"kind": "p", "text": "用 Claude Code 做设计、杠杆最高的闭环,是把真实参考连同你的设计上下文一起喂给它,再迭代到 UI 对得上 —— 由 CLAUDE.md 和 Skills 承载约束,免得你每次 prompt 都重新解释一遍。"}, {"kind": "ol", "items": ["从你手头最清晰的视觉参考出发 —— 而且要包含多种状态(桌面与移动、hover、空态、加载态),不要只给一张 hero 图。", "在 prompt 里说具体;即便是强 agent,含糊的 prompt 也只会产出泛泛的 UI。", "把你的设计系统与约定放进 CLAUDE.md,并告诉 Claude token 与标准原语在哪里。", "添加 Frontend Design skill,让 Claude 在写代码前先确定一个真实的美学方向。", "接好浏览器验证,让 Claude 渲染、调整到各断点,并对照参考做比对 —— 而不只是确认能构建通过。"]}, {"kind": "p", "text": "把一张参考图丢进会话,并用具体约束去提示:"}, {"kind": "code", "lang": "bash", "code": "claude \"把 reference-desktop.png 和 reference-mobile.png 用\n React + Vite + Tailwind + TypeScript 实现。\n 复用 CLAUDE.md 里描述的设计系统组件与 token。\n 匹配间距、布局与层级;做成响应式。\n 在浏览器里渲染,跨断点验证它与参考一致,\n 并迭代到对得上为止。\""}, {"kind": "p", "text": "同时跑一个 dev server,prompt 保持小而聚焦,好的迭代就 commit、坏的就 revert(revert 时告诉 Claude 一声),让每一轮都在干净的基础上推进。较大的重构用 plan 模式,这样动文件前你能先审一遍方案。"}]}, {"id": "figma", "heading": "Claude Code + Figma:设计 ↔ 代码往返", "blocks": [{"kind": "p", "text": "2026 年 2 月,Anthropic 与 Figma 通过 Figma MCP server 推出了一流的双向集成。它在两个方向都能用。"}, {"kind": "steps", "items": [{"label": "设计 → 代码", "body": "在 Figma 里选中一个 frame,或把链接粘进 Claude Code,拉取设计上下文,让它用你已有的组件库来实现这份设计。Code Connect 会让产出与你真实的组件保持对齐。"}, {"label": "代码 → 设计", "body": "在浏览器里构建并预览一个功能,然后说一句“Send this to Figma”,把运行中的 UI 捕获为可编辑的 Figma 图层 —— 整屏或选中的某个元素皆可。"}]}, {"kind": "p", "text": "用 claude plugin install figma@claude-plugins-official 安装一次即可(Dev Mode MCP 需要 Figma 付费方案)。同一个 Figma MCP 对 Claude Code、Codex、Cursor 与 VS Code 都可用 —— 正是 Open Design 所要编排的那类可移植、多 agent 能力。"}]}, {"id": "vs", "heading": "Claude Code vs Codex vs Cursor 做设计", "blocks": [{"kind": "p", "text": "设计工作没有唯一赢家 —— 每个 agent 各有所长,有经验的团队会把它们叠着用。一个公允的概括:"}, {"kind": "table", "columns": ["Agent", "设计强项", "最适合"], "rows": [["Claude Code", "具体的设计决策(hex、间距、字号)与理解代码库的 UX 推理", "前端推理与大上下文重构"], ["Codex", "强视觉打磨与图像理解;沙箱化异步构建", "委派式异步构建与可移植的 AGENTS.md 规则"], ["Cursor", "带实时预览与内联编辑的“边做边看”闭环", "IDE 内紧凑的“迭代-观察”式 UI 工作"]]}, {"kind": "p", "text": "社区反复得出的结论是:品味来自人。三者在没有 skill、参考与约束时都会默认滑向泛用美学。这才是真正要解决的问题 —— 它是设计工具形状的,而非模型形状的。"}]}, {"id": "pitfalls", "heading": "常见坑,以及如何避开“AI 套路感”", "blocks": [{"kind": "p", "text": "即便 Claude Code 以有品味著称,对 AI 生成设计最常见的吐槽仍是它显得套路 —— Inter 字体、白底上的紫色渐变、柔和阴影、过大的圆角,一种“一看就是 AI 做的”的观感。Anthropic 自己把这归因于分布收敛:安全的选择在网页训练数据里占主导。其他被反映的问题还包括移动端布局错乱、以及指令文字漏进了 UI 文案。"}, {"kind": "steps", "items": [{"label": "装上 Frontend Design skill", "body": "它会逼 Claude 确定一个真实方向,并明确避开被 AI 滥用的字体与渐变。"}, {"label": "启用浏览器验证", "body": "让 Claude 渲染并跨断点自检,避免布局在移动端悄悄崩掉。"}, {"label": "提供 token 与参考", "body": "真实的设计 token 与参考截图,是对产出质量影响最大的单一杠杆。"}, {"label": "把规则写进 CLAUDE.md", "body": "把“不用 hero 卡片、最多两种字体、品牌优先的层级”这类规则,放在 agent 每次都会读到的地方。"}]}, {"kind": "p", "text": "注意每一条缓解措施,本质都是在给 agent 一份精选的设计上下文。逐个项目手工维护这份上下文,正是 Open Design 替你省掉的苦差。"}]}, {"id": "open-design", "heading": "在 Open Design 里用 Claude Code 做设计", "blocks": [{"kind": "p", "text": "Open Design 就是上面那套工作流一直在呼唤的开源设计层。它把 Claude Code 当作一等适配器,并在外面包上一层精选的 skill 与设计系统库、一条结构化渲染流水线,以及一个本地桌面 UI —— 让那份令 Claude Code 出彩的设计上下文,从第一次运行就在位,而不必每次手工拼装。"}, {"kind": "ol", "items": ["安装 Open Design,并选择 Claude Code 作为你的 agent。", "用你的 Anthropic API key(BYOK)或 Claude 订阅认证 —— 凭证留在你自己机器上,绝不经我们中转。", "挑一套设计系统与一个 skill,然后产出风格一致的 deck、原型与落地页。", "每一件产物与 DESIGN.md 文件都存在你自己的仓库里,而非托管云端。"]}, {"kind": "p", "text": "同一个 Claude Code agent、同一把 key —— 外加一套真实、可移植、开源的设计工作流。它本地优先、Apache-2.0,所以你的工作与凭证都不会离开你的机器。"}]}], "faqTitle": "常见问题", "faq": [{"name": "Claude Code 适合做设计吗?", "text": "适合 —— 它被普遍认为是前端品味最好的 coding agent,会对 hex 色值、间距与字号阶梯做出具体且理解代码库的决策。配上 Frontend Design skill、一套设计系统与真实参考图,它能产出生产级、响应式的 UI 并在浏览器里验证。缺了这份上下文,它就容易退回泛用样子 —— 这正是 Open Design 要补的缺口。"}, {"name": "用 Claude Code 做设计需要 Claude 订阅吗?", "text": "你可以用 Anthropic API key(BYOK,经 Console)或 Claude 订阅(Pro / Max),两者皆可。无论哪种,Open Design 都不会中转你的凭证 —— 它们由你的 agent 在你机器上直接使用。"}, {"name": "前端设计该用 Claude Code 还是 Codex?", "text": "两者都很强。Claude Code 以具体、理解代码库的设计决策与前端推理著称;Codex 视觉打磨强,擅长委派式的沙箱构建。很多团队两者都用 —— Open Design 让你切换 agent 而无需改动设计工作流。"}, {"name": "怎么把 Claude Code 接到 Figma?", "text": "用 claude plugin install figma@claude-plugins-official 安装官方 Figma 插件。之后你就能借助设计上下文在代码里实现 Figma frame,并用“Send this to Figma”把运行中的 UI 推回成可编辑的 Figma 图层。Dev Mode MCP 需要 Figma 付费方案。"}, {"name": "Skills 和 CLAUDE.md 是什么?", "text": "CLAUDE.md 是你项目根目录里的一个 markdown 文件,Claude Code 在每次会话开始时都会读它 —— 这是写入设计规范的地方。Skills 把可复用的指令与资源打包,由 Claude 按需加载,其中包括 Anthropic 官方的 Frontend Design skill。Open Design 把两者都做成精选库,帮你免去逐项目搭建。"}, {"name": "怎么避开泛用的“AI 套路感”?", "text": "装上 Frontend Design skill,提供真实的设计 token 与参考截图,把品牌规则写进 CLAUDE.md,并启用浏览器验证。Open Design 把这些做成精选库,帮你免去逐项目搭建。"}, {"name": "Open Design 和 Anthropic 有从属关系吗?", "text": "没有。Claude Code 是 Anthropic 的产品;Open Design 是一个独立的开源项目,把它作为一等适配器来支持。Claude 与 Claude Code 是 Anthropic 的商标。"}, {"name": "我的文件和凭证安全吗?", "text": "安全 —— Open Design 本地优先、Apache-2.0。你的文件、产物与 DESIGN.md 都留在你自己的仓库里,你的 Anthropic 凭证由你的 agent 直接使用,绝不经 Open Design 服务器中转。"}], "ctaTitle": "用开放的方式,和 Claude Code 一起做设计。", "ctaBody": "带上你自己的 Anthropic key 或 Claude 订阅,把每个文件都留在本地,再给你已在用的 agent 包上一层精选设计库。", "ctaActions": [{"label": "在 Open Design 里使用 Claude Code", "href": "/quickstart/", "variant": "primary"}, {"label": "在 GitHub 上 Star", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "下载桌面应用", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "See all supported agents"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex 做设计 — Open Design", + description: "大家如何用 OpenAI Codex 做 UI 和网页设计 —— Product Design 插件、Figma 集成、前端 skill —— 以及 Open Design 如何把 Codex 变成本地优先的开源设计 Agent。", + breadcrumb: "Codex", + label: "Agent · Codex", + heading: "用 Codex 做设计。", + lead: "Codex 是 OpenAI 的编码 Agent。靠 Product Design 插件和 Figma 集成,它已经成了一个正经的设计工具。Open Design 把 Codex 接进开源设计工作流 —— 你自己的 OpenAI 密钥或 ChatGPT 订阅,你自己的文件,本地优先。", + rich: {"heroCtaLead": "Open Design 把 Codex 变成本地优先的开源设计 Agent —— 你自己的 OpenAI 密钥、你自己的文件,外加一套围绕它的精选 skill 与设计系统库。", "heroCtaActions": [{"label": "在 Open Design 里用 Codex", "href": "/quickstart/", "variant": "primary"}, {"label": "给 GitHub 点 Star", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "下载桌面客户端", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Codex 最初只是个代码生成器,但到 2026 年,只要你给对参考、skill 和验证回路,它已经能设计出真正可用的界面。这是一篇端到端的实操指南:怎么用 Codex 做 UI、前端和设计系统,以及怎么用 Open Design 把它接进结构化的设计工作流。", "内容覆盖:Codex 现在到底是什么、为什么它突然擅长前端、怎么从零配好、截图转 UI 的回路、官方的 Figma 双向打通、它跟 Cursor 与 Claude Code 的差异、让 AI 输出显得千篇一律的那些坑,以及 Open Design 作为开源、本地优先的设计层怎么补上缺口。"], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Codex 设计反馈回路:终端 Agent、浏览器渲染 UI、工作区,带一条回流箭头", "caption": "核心回路:Codex 在终端里构建 UI,在真实浏览器里渲染并验证,再对着你的参考图迭代。"}, "tocLabel": "本页内容", "toc": [{"id": "what-is-codex", "label": "Codex 到底是什么"}, {"id": "why-design", "label": "为什么 Codex 现在能做设计"}, {"id": "setup", "label": "从零配好 Codex 做设计"}, {"id": "screenshot-workflow", "label": "截图转 UI 的工作流"}, {"id": "figma", "label": "Codex + Figma 双向打通"}, {"id": "vs", "label": "Codex vs Cursor vs Claude Code"}, {"id": "pitfalls", "label": "常见坑与「AI 味」"}, {"id": "open-design", "label": "在 Open Design 里用 Codex"}, {"id": "faq", "label": "常见问题"}], "sections": [{"id": "what-is-codex", "heading": "Codex 到底是什么(以及不是什么)", "blocks": [{"kind": "p", "text": "先消歧,几乎每个搜「Codex」的人都会被绊一下。最早的 OpenAI Codex 是 2021 年的代码补全模型,驱动过早期 GitHub Copilot,2023 年已弃用。本文讲的不是它。今天的 Codex 是 OpenAI 的 Agent 式编码工具 —— 从自然语言任务出发,规划、编写、运行并验证代码。"}, {"kind": "p", "text": "现代 Codex 有四种形态:终端 CLI(用 Rust 重写、Apache-2.0 开源)、面向 VS Code / Cursor / Windsurf 的 IDE 扩展、用于异步委派任务的云端/网页版,以及带内置浏览器和 Computer Use 的桌面 App。"}, {"kind": "steps", "items": [{"label": "默认模型", "body": "截至 2026 年中,推荐模型是 gpt-5.5;而 gpt-5.4 是 OpenAI 明确为前端和 Computer Use 训练的那个模型。"}, {"label": "指令文件", "body": "Codex 读取项目里的 AGENTS.md(跨工具通用标准)作为项目规则 —— 也就是写你设计约定最自然的地方。"}, {"label": "沙箱", "body": "它跑在内核级沙箱里(默认 workspace-write),改你 UI 的 Agent 不会跑到项目之外乱动。"}]}, {"kind": "ul", "items": ["厂商:OpenAI", "凭据:OpenAI API key(BYOK)或 ChatGPT 订阅(Free / Go / Plus / Pro / Business / Enterprise)", "CLI 许可:Apache-2.0,开源"]}]}, {"id": "why-design", "heading": "为什么 Codex 现在能做设计", "blocks": [{"kind": "p", "text": "2026 年初有三件事凑到一起,才让 Codex 从通用代码生成器变成真正的设计工具。"}, {"kind": "steps", "items": [{"label": "一个为前端训练的模型", "body": "OpenAI 发布了 GPT-5.4 —— 它第一个主线版为前端和 Computer Use 训练的模型,对设计流程里的图像理解大幅提升,自我验证也更强,甚至能在定稿前先生成情绪板和多个视觉方案。"}, {"label": "一个官方前端 skill", "body": "openai/skills 目录里有一个精选 frontend-skill,强制真审美:无卡片布局、整屏 hero、品牌优先的层级、克制的动效、最多两种字体加一个强调色 —— 还逼 Codex 先写「视觉论点」再动手。"}, {"label": "浏览器验证", "body": "配上 Playwright skill,Codex 会真开浏览器、按断点缩放,并把输出跟参考图比对,而不只是「构建通过」就完事。"}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "设计系统、skill、参考图三者汇聚成优质设计输出的示意图", "caption": "审美来自你提供的三种输入:设计系统、skill 和真实参考图。"}, {"kind": "p", "text": "三件事背后的道理是一样的:Codex 默认没有审美。只有当你给它约束 —— 设计系统、审美 skill、具体参考 —— 它才能产出好设计。Open Design 打包的正是这三种输入,这也是两者契合的原因(下文详述)。"}]}, {"id": "setup", "heading": "从零配好 Codex 做设计", "blocks": [{"kind": "p", "text": "从一台干净的机器,到一个能构建并验证 UI 的 Codex,完整路径如下。"}, {"kind": "code", "lang": "bash", "code": "# 1. 安装 Codex CLI\nnpm install -g @openai/codex\n# 或:brew install --cask codex\n# 或:curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. 鉴权(推荐用 ChatGPT 登录,额度更高)\ncodex # 然后选 “Sign in with ChatGPT”\n\n# 3. 生成项目上下文\ncodex # 在项目里运行 /init 生成 AGENTS.md\n\n# 4. 装官方前端 skill,然后重启 Codex\n# (在 Codex App 里)$skill-installer frontend-skill\n\n# 5. 接 Figma MCP server(可选,做设计交付)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "五步配置流程:安装、鉴权、配置、装 skill、验证", "caption": "配置顺序:安装 → 鉴权 → 配 AGENTS.md → 装前端 skill → 开浏览器验证。"}, {"kind": "steps", "items": [{"label": "把设计规则写进去", "body": "把 token、基础组件、约定写进 AGENTS.md 或 DESIGN.md 并让 Codex 指向它们,输出就会贴合品牌,而不是退回那套通用样子。"}, {"label": "选对推理档位", "body": "OpenAI 提到:低到中等推理档位的前端效果,往往比最高档更好。"}]}]}, {"id": "screenshot-workflow", "heading": "截图转 UI 的工作流", "blocks": [{"kind": "p", "text": "Codex 做设计最高杠杆的回路,是把参考图变成可用的响应式 UI,再迭代到对齐为止。OpenAI 官方指引归纳为五步。"}, {"kind": "ol", "items": ["从你手头最清晰的视觉参考出发 —— 而且要包含多个状态(桌面和移动、hover、空态、加载态),不只是一张 hero 图。", "prompt 要具体;含糊的 prompt 只会产出通用 UI。", "准备好设计系统,并告诉 Codex token 和基础组件在哪。", "开启 Playwright 交互 skill,让 Codex 真在浏览器里渲染并按断点缩放。", "迭代时让 Codex 把实现跟截图比对 —— 而不只是确认「能构建」。"]}, {"kind": "p", "text": "喂图可以把截图拖进终端,或用 image 参数,然后用具体约束来 prompt:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"用 React + Vite + Tailwind + TypeScript 实现这个设计。\n 尽量复用我现有的设计系统组件和 token。\n 对齐间距、布局和层级;做成响应式。\n 用 Playwright skill 验证 UI 跟参考图一致,\n 不一致就一直迭代。\""}, {"kind": "p", "text": "在第二个终端里跑 dev server,prompt 保持小而聚焦,好的迭代就 commit、坏的就 revert(并告诉 Codex 你回退了),这样每一轮都在干净的基础上推进。"}]}, {"id": "figma", "heading": "Codex + Figma:设计 ↔ 代码双向打通", "blocks": [{"kind": "p", "text": "2026 年 2 月 OpenAI 和 Figma 宣布官方合作,把早先的 Figma MCP beta 升级成一等公民级的双向集成。两个方向都能走。"}, {"kind": "steps", "items": [{"label": "设计 → 代码", "body": "在 Figma 里复制某个 frame 的「link to selection」,粘进 Codex 配合 get_design_context,让它用你现有的组件库实现这个设计。"}, {"label": "代码 → 设计", "body": "generate_figma_design 工具(「Code to Canvas」)能把跑起来的 UI 变回可编辑的 Figma frame —— 整屏、选中元素或整个文件都行。"}]}, {"kind": "p", "text": "Figma MCP 以远程 server 形式运行且免限流。接一次,Codex、Claude Code、Cursor、VS Code 等都能用 —— 这种可移植的多 Agent 能力,正是 Open Design 要编排的东西。"}]}, {"id": "vs", "heading": "Codex vs Cursor vs Claude Code 做设计", "blocks": [{"kind": "p", "text": "做设计没有唯一赢家 —— 每个 Agent 强在不同地方,老手会叠着用。公允的总结:"}, {"kind": "table", "columns": ["Agent", "设计强项", "最适合"], "rows": [["Codex", "GPT-5.4 + 前端 skill 之后视觉打磨很强;图像理解好", "异步委派构建、沙箱化运行、可移植的 AGENTS.md 规则"], ["Cursor", "边改边看的视觉回路,带实时预览和行内编辑", "IDE 里贴身迭代、即时观察的 UI 工作"], ["Claude Code", "具体的设计决策(hex、间距、字体)和懂代码库的 UX", "前端推理和大上下文重构"]]}, {"kind": "p", "text": "社区反复得出的结论是:审美来自人。三者在没有 skill、参考和约束时,都会退回通用样子。这才是要解决的真问题 —— 而它是「设计工具」形状的,不是「模型」形状的。"}]}, {"id": "pitfalls", "heading": "常见坑,以及怎么避开「AI 味」", "blocks": [{"kind": "p", "text": "对 Codex 生成设计最常见的吐槽是「显得通用」—— 柔和渐变、漂浮面板、超大圆角、夸张阴影,那种 Inter 字体加紫色的味道,「一看就是 AI 做的」。其他常见问题还有移动端布局崩、指令文案泄漏进 UI、以及很快撞到用量上限。"}, {"kind": "steps", "items": [{"label": "装一个前端 skill", "body": "精选的审美 skill 逼 Codex 选定一个真方向,而不是默认那套样子。"}, {"label": "开启 Playwright 验证", "body": "让 Codex 跨断点渲染并自检,布局就不会在移动端悄悄崩。"}, {"label": "喂 token 和参考", "body": "真实的设计 token 和参考截图,是对输出质量影响最大的那个杠杆。"}, {"label": "把规则写进 AGENTS.md", "body": "把「不要 hero 卡片、最多两种字体、品牌优先层级」这类规则放在 Agent 每次都会读到的地方。"}]}, {"kind": "p", "text": "注意:每条缓解措施,本质都是给 Agent 一套精选的设计上下文。而逐个项目手工维护这套上下文,正是 Open Design 帮你省掉的苦活。"}]}, {"id": "open-design", "heading": "在 Open Design 里用 Codex", "blocks": [{"kind": "p", "text": "Open Design 就是上面这套工作流一直在呼唤的那个开源设计层。它把 Codex 当作一方适配器,外面包上精选的 skill 与设计系统库、结构化渲染流水线、本地桌面 UI —— 让那些让 Codex 变好的设计上下文从第一次运行就在,而不是每次手工拼。"}, {"kind": "ol", "items": ["安装 Open Design,选 Codex 作为你的 Agent。", "用 OpenAI API key(BYOK)或 ChatGPT 订阅鉴权 —— 凭据留在你机器上,绝不经我们中转。", "选一套设计系统和一个 skill,生成审美一致的 deck、原型和落地页。", "每个产物和 DESIGN.md 都在你自己的 repo 里,不在托管云端。"]}, {"kind": "p", "text": "同一个 Codex Agent、同一把密钥 —— 外加一套真正可移植的开源设计工作流。它本地优先、Apache-2.0,你的工作和凭据都不离开你的机器。"}]}], "faqTitle": "常见问题", "faq": [{"name": "OpenAI Codex 真的能做设计吗?", "text": "能 —— 只要上下文里有前端 skill、设计系统和真实参考图,Codex(尤其在 GPT-5.4 上)能产出生产级、响应式的 UI,还能在浏览器里自检。没有这套上下文它就会退回通用样子,而这正是 Open Design 补的缺口。"}, {"name": "这是 OpenAI 的 Codex Product Design 插件吗?", "text": "不是。Open Design 是独立开源项目,把 Codex 作为 Agent 集成,用本地优先的开源 skill 与设计系统库补充官方工具。"}, {"name": "用 Codex 做设计需要 ChatGPT 订阅吗?", "text": "OpenAI API key(BYOK)或 ChatGPT 订阅都行。ChatGPT 登录通常额度更高;无论哪种,Open Design 都不中转你的凭据。"}, {"name": "前端设计该用 Codex 还是 Claude Code?", "text": "两个都强。Claude Code 以具体、懂代码库的设计决策见长;Codex 在 GPT-5.4 之后视觉打磨很强,且擅长沙箱化的异步委派构建。很多团队两个都用 —— Open Design 让你换 Agent 时不用换设计工作流。"}, {"name": "怎么把 Codex 接到 Figma?", "text": "加上官方 Figma MCP server(codex mcp add figma --url https://mcp.figma.com/mcp)。之后用 get_design_context 把 Figma frame 实现成代码,用 generate_figma_design 把跑起来的 UI 推回可编辑的 Figma frame。"}, {"name": "怎么避免那种通用的「AI 味」审美?", "text": "装一个前端 skill、喂真实的设计 token 和参考截图、把品牌规则写进 AGENTS.md、并开启 Playwright 验证。Open Design 把这些做成精选库,你就省掉了逐项目的配置。"}, {"name": "Open Design 跟 OpenAI 有关联吗?", "text": "没有。Codex 是 OpenAI 的产品;Open Design 是独立开源项目,以一方适配器的方式支持它。OpenAI 和 Codex 是 OpenAI 的商标。"}, {"name": "我的文件和凭据安全吗?", "text": "安全 —— Open Design 本地优先。你的文件、产物和 DESIGN.md 都留在自己的 repo,OpenAI 凭据由你的 Agent 直接使用,绝不经 Open Design 服务器中转。"}], "ctaTitle": "用开源的方式,跟 Codex 一起设计。", "ctaBody": "自带 OpenAI 密钥、所有文件留在本地,给你已经在用的 Agent 配上一套精选设计库。", "ctaActions": [{"label": "在 Open Design 里用 Codex", "href": "/quickstart/", "variant": "primary"}, {"label": "给 GitHub 点 Star", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "下载桌面客户端", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "查看全部支持的 Agent"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor 做设计 — Open Design", + description: "设计师如何用 Cursor 做 UI 和网页设计 —— Design Mode、Figma 转代码、Figma MCP —— 以及 Open Design 如何把 Cursor 变成本地优先的开源设计 Agent。", + breadcrumb: "Cursor", + label: "Agent · Cursor", + heading: "Cursor 给设计师。", + lead: "Cursor 是那个 AI 代码编辑器,现在带了可视化 Design Mode。设计师用它点选、勾画来改 UI,也用它把 Figma 转成代码。Open Design 把 Cursor Agent 接进开源设计工作流,文件全留本地。", + rich: {"heroCtaLead": "Open Design 把 Cursor 变成一个本地优先、开源的设计 agent——用你自己的 Cursor 账号或模型密钥、你自己的文件,外面再裹一层精选的 skill 与 design-system 库。", "heroCtaActions": [{"label": "在 Open Design 里使用 Cursor", "href": "/quickstart/", "variant": "primary"}, {"label": "在 GitHub 上 Star", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "下载桌面端", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor 是一款 AI 优先的代码编辑器,它让“边写边看渲染”成为做 UI 的默认方式。借助 Agent 模式、行内编辑、编辑器内置预览,以及通过 MCP 接入的 Figma,它已经成为一个真正能用的设计工具——前提是你给它对的参考、规则和一套验证回路。这是一份从头到尾、可落地的指南,讲如何用 Cursor 做 UI、前端和 design-system 工作,并把它接入 Open Design 的结构化设计工作流。", "内容涵盖:Cursor 到底是什么、为什么它“边迭代边看”的紧凑回路适合做设计、如何从零搭起、从预览到 UI 的迭代回路、通过 MCP 与 Figma 的往返、它与 Codex 和 Claude Code 的对比、让 AI 产出显得平庸的那些坑,以及 Open Design 作为开源、本地优先的设计层如何补齐这道缺口。"], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Cursor 设计收敛示意:左侧是编辑器,中间是带 Cursor 标志的精选 skill 与 design-system hub,右侧是渲染出的 UI", "caption": "核心思路:Cursor 在编辑器里编辑并渲染 UI,而一个精选的设计 hub 为它喂入设计系统、skill 和参考,让产出显得是有意为之、而非随手生成。"}, "tocLabel": "本页目录", "toc": [{"id": "what-is-cursor", "label": "Cursor 到底是什么"}, {"id": "why-design", "label": "为什么 Cursor 擅长做设计"}, {"id": "setup", "label": "从零配置 Cursor 做设计"}, {"id": "preview-workflow", "label": "从预览到 UI 的工作流"}, {"id": "figma", "label": "Cursor + Figma(经 MCP)"}, {"id": "vs", "label": "Cursor vs Codex vs Claude Code"}, {"id": "pitfalls", "label": "常见坑与“AI 味”观感"}, {"id": "open-design", "label": "在 Open Design 里用 Cursor 做设计"}, {"id": "faq", "label": "常见问题"}], "sections": [{"id": "what-is-cursor", "heading": "Cursor 到底是什么", "blocks": [{"kind": "p", "text": "Cursor 是 Anysphere 打造的 AI 优先代码编辑器。它是 VS Code 的一个 fork,所以保留了熟悉的编辑器、扩展和快捷键,但把整个工作流围绕一个 AI agent 重建——这个 agent 能读懂你的整个项目、跨多文件编辑、运行命令,并和你一起在回路里迭代。"}, {"kind": "p", "text": "对设计工作而言,关键的几个能力是:Agent 模式(你描述想要的结果,Cursor 规划并跨文件编辑)、用于快速微调的行内编辑与 Tab 补全、让你不离开窗口就能看到运行中 UI 的编辑器内置预览,以及让它能拉入外部上下文(比如一个实时 Figma 文件)的 MCP 支持。"}, {"kind": "steps", "items": [{"label": "项目规则", "body": "Cursor 会读取项目指令文件——`.cursor/rules` 下纳入版本管理的 `.mdc` 规则,以及一个纯文本 `AGENTS.md`——你可以把设计约定写在 agent 每次都会读到的地方。"}, {"label": "模型", "body": "Cursor 在模型上很灵活:订阅自带前沿模型,也支持用你自己的模型密钥(BYOK),所以同一套编辑器工作流背后用哪台引擎由你定。"}, {"label": "MCP", "body": "它支持 Model Context Protocol,外部 server——最相关的就是 Figma MCP server——可以成为 agent 的一等上下文。"}]}, {"kind": "ul", "items": ["厂商:Anysphere", "凭证:Cursor 账号 / 订阅(Hobby / Pro / Business)或你自己的模型密钥(BYOK)", "形态:AI 优先的代码编辑器(VS Code fork),内置 agent 与预览"]}]}, {"id": "why-design", "heading": "为什么 Cursor 擅长做设计", "blocks": [{"kind": "p", "text": "Cursor 在设计上的优势不是某个单一功能,而是“边写边看”这条回路的紧凑度。有三点让它更像一个设计工具,而不是一个泛泛的代码生成器。"}, {"kind": "steps", "items": [{"label": "紧凑的“边迭代边看”回路", "body": "你给出提示,Cursor 跨文件编辑,编辑器内置预览立刻渲染出结果——于是你能在几秒内调整间距、层级和动效,而不必在另一个终端和浏览器之间来回切换。"}, {"label": "直接的可视化编辑", "body": "除了对话,Cursor 还允许你在预览里选中元素、直接微调样式,让小的视觉修正更像设计编辑、而非翻代码考古。"}, {"label": "项目规则与 MCP 上下文", "body": "有了 `.cursor/rules`(或 `AGENTS.md`)和 Figma MCP server,agent 是对着你的 tokens、组件和真实设计规格在工作,而不是靠猜。"}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "展示 design system、skill 与参考图三者收敛为优质设计产出的示意图", "caption": "审美来自你提供的三个输入:一套设计系统、一个 skill,以及真实的参考图。"}, {"kind": "p", "text": "结论和每个 agent 教给我们的一样:Cursor 默认并没有审美。只有当你给它约束——一套设计系统、一个审美 skill、具体的参考——它才能产出好设计。Open Design 打包的正是这些输入,这也是两者天然契合的原因(下文详述)。"}]}, {"id": "setup", "heading": "从零把 Cursor 配置成能做设计", "blocks": [{"kind": "p", "text": "下面是从一台干净机器,到一个能对着你的设计系统构建、预览并验证 UI 的 Cursor 的完整路径。"}, {"kind": "ol", "items": ["从 cursor.com 安装 Cursor,用 Cursor 账号登录,或在设置里配置你自己的模型密钥(BYOK)。", "打开你的项目,在对话 / Agent 面板里选一个模型。", "加项目规则:用 `.cursor/rules/*.mdc` 写结构化、按 glob 作用域生效的约定,或用一个纯文本 `AGENTS.md` 写简单可读的指令。", "接入 Figma MCP server(可选),让 agent 能读取实时设计上下文。", "启动你的 dev server,用编辑器内置预览边迭代边看、边验证 UI。"]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "五步配置流程:安装、认证、配置规则、添加 skill、验证", "caption": "配置顺序:安装 → 认证 → 配置项目规则 → 添加 skill → 启用预览验证。"}, {"kind": "p", "text": "一份最简的项目规则文件,就能让 agent 对着品牌做设计、而不是退回到一个泛泛的样子。把它放在 Cursor 每次都会读到的地方:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- 复用已有的 design-system tokens 和组件;不要写死 hex 或间距。\n- 最多两种字体、一个强调色。\n- 品牌优先的层级;克制的动效。不要 hero card,不要过大的圆角。\n- 默认做响应式;收尾前先在预览里验证桌面端和移动端。"}, {"kind": "steps", "items": [{"label": "把设计规则写下来", "body": "把你的 tokens、基础元件和约定放进 `.cursor/rules` 或 `AGENTS.md`,并让 Cursor 指向它们,这样产出会贴合品牌、而不是退回到泛泛的样子。"}, {"label": "让提示保持小而聚焦", "body": "Cursor 的紧凑回路偏爱聚焦的请求——一次只迭代一个组件或一种状态,每一轮之间都盯着预览看。"}]}]}, {"id": "preview-workflow", "heading": "从预览到 UI 的工作流", "blocks": [{"kind": "p", "text": "用 Cursor 做设计,杠杆最高的回路就是把一张参考变成能跑、且响应式的 UI,并在编辑器里一直盯着实时预览迭代到匹配为止——而不是靠猜。"}, {"kind": "ol", "items": ["从你手上最清晰的视觉参考开始——并且要包含多种状态(桌面与移动、hover、空态、加载态),而不只是一张主视觉。", "提示要具体;含糊的提示只会产出泛泛的 UI。", "准备好设计系统,并告诉 Cursor tokens 和标准基础元件都在哪里。", "让编辑器内置预览开着、dev server 跑着,这样每次编辑都能在你关心的断点上立刻渲染出来。", "通过把渲染出的 UI 和参考反复比对来迭代——小的视觉修正就直接在预览里选中元素来调。"]}, {"kind": "p", "text": "把图片附到对话里来喂参考,然后用具体约束给出提示:"}, {"kind": "code", "lang": "text", "code": "用 React + Vite + Tailwind + TypeScript 实现这个设计。\n复用我已有的 design-system 组件和 tokens。\n匹配间距、布局和层级;做成响应式。\n预览一直开着——验证桌面端和移动端都和参考一致,\n迭代到一致为止。"}, {"kind": "p", "text": "好的迭代就提交,坏的就回退(回退时告诉 Cursor 一声),让每一轮都建立在干净的基础上——这是让任何 agent 回路不跑偏的同一条纪律。"}]}, {"id": "figma", "heading": "Cursor + Figma:经 MCP 的设计 ↔ 代码往返", "blocks": [{"kind": "p", "text": "Cursor 通过官方的 Figma MCP server 连接 Figma,让 agent 对一个实时 Figma 文件有结构化访问,而不是只拿到一张扁平截图。这就把交接里的猜测成分去掉了。"}, {"kind": "steps", "items": [{"label": "设计 → 代码", "body": "在 Figma 里复制某个 frame 的链接,粘进 Cursor,让它去实现这个设计。MCP server 暴露的是真实的设计上下文——组件、变量、布局数据、tokens——所以生成的代码是贴合源文件的,而不是近似。"}, {"label": "保持对齐", "body": "只要在 Figma 里一致地使用设计 tokens、样式和组件(有 Code Connect 时用上),Cursor 的产出就会映射到你真实的设计系统,而不是重新发明一套基础元件。"}]}, {"kind": "p", "text": "远程 Figma MCP server 配一次,就能作为一等上下文供 Cursor 使用。由于 MCP 是开放标准,同一个 server 可以在 Cursor、Claude Code、Codex 和 VS Code 之间复用——这正是 Open Design 生来要去编排的那种可移植、多 agent 能力。"}]}, {"id": "vs", "heading": "Cursor vs Codex vs Claude Code:做设计怎么选", "blocks": [{"kind": "p", "text": "做设计没有唯一赢家——每个 agent 各有所长,有经验的团队会把它们叠着用。一个公允的总结:"}, {"kind": "table", "columns": ["Agent", "设计强项", "最适合"], "rows": [["Cursor", "“边写边看”的可视化回路,带编辑器内置实时预览与直接选中元素编辑", "IDE 里“边迭代边看”的紧凑 UI 工作"], ["Codex", "配上前端 skill 后视觉打磨强;图像理解 + 沙箱化运行", "托管式异步构建,以及可移植的 AGENTS.md 规则"], ["Claude Code", "具体的设计决策(hex、间距、字体)和懂代码库的 UX", "前端推理与大上下文重构"]]}, {"kind": "p", "text": "社区反复得出的结论是:审美来自人。三者在没有 skill、参考和约束时都会退回到一个泛泛的样子。那才是真正要解决的问题——而它是“设计工具”形状的,不是“模型”形状的。"}]}, {"id": "pitfalls", "heading": "常见坑,以及如何避开“AI 味”观感", "blocks": [{"kind": "p", "text": "对 Cursor 生成设计最常见的抱怨,是它看着很泛——柔和渐变、悬浮面板、过大的圆角、夸张阴影,一股“Inter 字体加紫色”的味道,“一看就是 AI 做的”。其他被反映的问题还包括移动端布局错乱、指令文字泄漏进 UI 文案里。"}, {"kind": "steps", "items": [{"label": "加一个设计 skill", "body": "一个精选的审美 skill 会逼 Cursor 选定一个真实方向,而不是用默认那套。"}, {"label": "用预览来验证", "body": "在编辑器内置预览里跨断点渲染并自检,这样布局就不会在移动端悄悄崩掉。"}, {"label": "提供 tokens 和参考", "body": "真实的设计 tokens 和参考截图,是对产出质量影响最大的那个杠杆。"}, {"label": "把规则写进 `.cursor/rules`", "body": "把“不要 hero card、最多两种字体、品牌优先层级”这类规则,放在 agent 每次都会读到的地方。"}]}, {"kind": "p", "text": "注意到没有:每一条缓解措施都是在给 agent 一份精选的设计上下文。逐个项目、用手去维护这份上下文,正是 Open Design 帮你省掉的苦活。"}]}, {"id": "open-design", "heading": "在 Open Design 里用 Cursor 做设计", "blocks": [{"kind": "p", "text": "Open Design 就是上面这套工作流一直在要的那一层开源设计层。它把 Cursor 当作一等适配器,外面裹上一个精选的 skill 与 design-system 库、一条结构化的渲染流水线,以及一个本地桌面端 UI——让那份让 Cursor 变好用的设计上下文,从第一次运行就在那儿,而不是每次都手工拼。"}, {"kind": "ol", "items": ["安装 Open Design,选 Cursor 作为你的 agent。", "用你的 Cursor 账号或你自己的模型密钥(BYOK)认证——凭证留在你的机器上,绝不经我们代理。", "挑一套设计系统和一个 skill,然后生成审美一致的演示稿、原型和落地页。", "每一份产物和 DESIGN.md 都存在你自己的 repo 里,而不是某个托管云。"]}, {"kind": "p", "text": "同一个 Cursor agent、同一把密钥——外面再加一套真实、可移植、开源的设计工作流。它本地优先、Apache-2.0 授权,所以你的工作和凭证没有任何东西会离开你的机器。"}]}], "faqTitle": "常见问题", "faq": [{"name": "Cursor 真的能做设计吗?", "text": "能——只要上下文里有一个设计 skill、一套设计系统和真实参考图,Cursor 就能产出生产级、响应式的 UI,而它的编辑器内置预览让你能在视觉上验证并打磨。缺了这份上下文,它就容易退回到泛泛的样子,而这正是 Open Design 补齐的缺口。"}, {"name": "这是 Cursor 官方产品吗?", "text": "不是。Open Design 是一个独立的开源项目,把 Cursor 作为 agent 集成进来。它用一个本地优先、开源的 skill 与 design-system 库来补充 Cursor。"}, {"name": "用 Cursor 做设计需要 Cursor 订阅吗?", "text": "你可以用 Cursor 账号 / 订阅,也可以用自己的模型密钥(BYOK)。无论哪种方式,Open Design 都不会代理你的凭证——它们由你的 agent 直接使用。"}, {"name": "前端设计选 Cursor 还是 Claude Code?", "text": "两者都很强。Claude Code 以具体、懂代码库的设计决策著称;Cursor 的优势是编辑器里“边写边看”的紧凑回路加实时预览。很多团队两个都用——Open Design 让你切换 agent 时无需改动设计工作流。"}, {"name": "怎么把 Cursor 连到 Figma?", "text": "在 Cursor 里加上官方 Figma MCP server,然后把一个 Figma frame 链接粘进对话,让 Cursor 去实现它。该 server 暴露真实的组件、变量和布局数据,让生成的代码贴合源设计。"}, {"name": "怎么避开泛泛的“AI 味”观感?", "text": "加一个设计 skill、提供真实的设计 tokens 和参考截图、把品牌规则写进 `.cursor/rules` 或 `AGENTS.md`,并在预览里跨断点验证。Open Design 把这些做成一个精选库,让你省掉逐项目的搭建。"}, {"name": "Open Design 和 Cursor 或 Anysphere 有关联吗?", "text": "没有。Cursor 是 Anysphere 的产品;Open Design 是一个独立的开源项目,把它作为一等适配器来支持。Cursor 和 Anysphere 是 Anysphere, Inc. 的商标。"}, {"name": "我的文件和凭证安全吗?", "text": "安全——Open Design 本地优先。你的文件、产物和 DESIGN.md 都留在你自己的 repo 里,你的 Cursor 或模型凭证由你的 agent 直接使用,绝不经 Open Design 的服务器中转。"}], "ctaTitle": "用开放的方式,和 Cursor 一起做设计。", "ctaBody": "带上你自己的 Cursor 账号或模型密钥,把每个文件都留在本地,并在你已经在用的 agent 外面,得到一个精选的设计库。", "ctaActions": [{"label": "在 Open Design 里使用 Cursor", "href": "/quickstart/", "variant": "primary"}, {"label": "在 GitHub 上 Star", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "下载桌面端", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "查看所有支持的 agent"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode 做设计 — Open Design", + description: "大家如何用 OpenCode 做 UI 和网页设计 —— design.md 文件、UI/UX skill、Figma MCP —— 以及 Open Design 如何把 OpenCode 变成本地优先的开源设计 Agent。", + breadcrumb: "OpenCode", + label: "Agent · OpenCode", + heading: "用 OpenCode 做设计。", + lead: "OpenCode 是开源的终端 AI 编码 Agent。设计师给它挂上设计 skill 和 DESIGN.md 文件来生成真正的 UI。Open Design 把这套做成结构化的开源工作流 —— 用你自己的模型密钥,所有东西留本地。", + rich: {"heroCtaLead": "Open Design 把 OpenCode 变成本地优先、开源的设计 agent——用你自己选的任意模型和 provider key,用你自己的文件,外加一套精选的 skill 与设计系统库。", "heroCtaActions": [{"label": "在 Open Design 中使用 OpenCode", "href": "/quickstart/", "variant": "primary"}, {"label": "在 GitHub 上 Star", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "下载桌面应用", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode 是一个开源、以终端为先的 AI 编码 agent,刻意做成与模型无关:你自带 provider key,在同一套工作流背后运行任意你想用的模型。这种开放性让它天然适合做设计——但和所有 agent 一样,只有当你给它正确的参考、skill 和一套验证回路时,它才能产出好的 UI。本文是一份从头到尾的实用指南,讲如何用 OpenCode 做 UI、前端和设计系统工作,以及如何把它接入 Open Design 的结构化设计工作流。", "内容涵盖:OpenCode 到底是什么、为什么一个与模型无关的开源 agent 适合做设计、如何从零配置、截图转 UI 的回路、AGENTS.md 与 MCP 如何扩展它、它与 Codex / Claude Code / Cursor 的对比、让 AI 产出显得套路化的那些坑,以及 Open Design 如何作为一个开源、本地优先的设计层来补上这道缺口——这是个天然的搭配,因为两个项目都是开源、都跑在你自己的机器上。"], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "OpenCode 设计反馈回路:终端 TUI agent、在浏览器中渲染 UI,以及一个工作区,带一条回环反馈箭头", "caption": "核心回路:OpenCode 在终端里构建 UI,在真实浏览器中渲染并验证,再对照你的参考反复迭代——用的是你自己选的任意模型。"}, "tocLabel": "本页目录", "toc": [{"id": "what-is-opencode", "label": "OpenCode 究竟是什么"}, {"id": "why-design", "label": "为什么开放、任意模型的 agent 适合做设计"}, {"id": "setup", "label": "从零配置 OpenCode 做设计"}, {"id": "screenshot-workflow", "label": "截图转 UI 的工作流"}, {"id": "extend", "label": "AGENTS.md、MCP 与可分享会话"}, {"id": "vs", "label": "OpenCode vs Codex vs Claude Code vs Cursor"}, {"id": "pitfalls", "label": "坑,以及那种“AI 味”的观感"}, {"id": "open-design", "label": "在 Open Design 中用 OpenCode 做设计"}, {"id": "faq", "label": "常见问题"}], "sections": [{"id": "what-is-opencode", "heading": "OpenCode 究竟是什么", "blocks": [{"kind": "p", "text": "OpenCode 是一个为终端打造的开源 AI 编码 agent,由 SST 背后的团队(Anomaly Innovations)维护。它会读取你的代码仓库、运行命令、编辑文件,并与大语言模型对话——但和被厂商绑定的 agent 不同,它本身不自带模型。你把它指向任意你想用的 provider 和模型,并自带 key。"}, {"kind": "p", "text": "它以终端界面(TUI)运行,并在同一引擎之上提供桌面应用和 IDE 扩展。底层采用客户端/服务端架构,所以真正干活的 agent 与你驱动它的界面是解耦的。它内置 build 和 plan 两个 agent,用 Tab 键切换。"}, {"kind": "steps", "items": [{"label": "与模型无关", "body": "模型和 provider 来自 models.dev 这个开放目录。你在 opencode.json 里用 provider/model-id 字符串配置,并可禁用不想加载的 provider——所以同一套设计工作流可以跑在 Anthropic、OpenAI、Google、OpenRouter、本地模型等之上。"}, {"label": "指令文件", "body": "OpenCode 会读取项目里的 AGENTS.md 文件(跨工具的通用标准,也兼容 CLAUDE.md)作为项目规则——这正是编码你设计约定的天然位置。运行 /init 即可生成一个。"}, {"label": "可扩展", "body": "它支持 LSP 集成、MCP server、主题、快捷键和自定义命令,还有可分享的会话链接用于协作。"}]}, {"kind": "ul", "items": ["维护方:SST / Anomaly Innovations(开源项目)", "凭证:你自己的模型 provider API key(BYOK,无厂商锁定)", "许可:MIT,开源"]}]}, {"id": "why-design", "heading": "为什么开放、任意模型的 agent 适合做设计", "blocks": [{"kind": "p", "text": "OpenCode 不像厂商 agent 那样有某一个“设计模型”——而这恰恰是它的优势。因为与模型无关且开源,你可以在同一套设计工作流上运行当下前端最强的那个模型,之后随时更换,或退回到本地模型,全程不用改配置。"}, {"kind": "p", "text": "但光选对模型并不能买来审美。和所有编码 agent 一样,除非你给它约束,否则 OpenCode 也会产出套路化的 UI。好的设计产出来自你提供的三项输入。"}, {"kind": "steps", "items": [{"label": "一套设计系统", "body": "真实的 tokens、基础组件和约定,让 agent 复用,从而让产出贴合某个品牌,而不是退回到通用的观感。"}, {"label": "一个审美 skill", "body": "一个精选的 skill,强制真正的审美——克制的动效、品牌优先的层级、最多两种字体一种强调色——并让 agent 在动手前先定一个方向。"}, {"label": "具体的参考图", "body": "真实的参考图,以及多种状态(桌面和移动、hover、空态、加载态),而不是只有一张主视觉。"}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "展示设计系统、skill 与参考图三者汇聚成优质设计产出的示意图", "caption": "审美来自你提供的三项输入:一套设计系统、一个 skill 和真实参考图——与你跑哪个模型无关。"}, {"kind": "p", "text": "结论:OpenCode 给了你模型自由,但审美仍来自一套精选的设计上下文。Open Design 恰好把这些输入打包好,这也是两者契合的原因——它们都是开源、都本地优先(下文详述)。"}]}, {"id": "setup", "heading": "从零配置 OpenCode 做设计", "blocks": [{"kind": "p", "text": "下面是从一台干净的机器到一个能构建并验证 UI 的 OpenCode 的完整路径。"}, {"kind": "code", "lang": "bash", "code": "# 1. 安装 OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# 或:npm i -g opencode-ai@latest\n# 或:brew install sst/tap/opencode\n\n# 2. 在项目里启动 TUI,然后认证你的 provider\nopencode # 然后运行 /login,选择 provider 并粘贴你的 key\n\n# 3. 生成项目上下文\nopencode # 在项目里运行 /init 生成 AGENTS.md\n\n# 4. 选择你的模型(任意 provider,经 models.dev)\n# 在 opencode.json 里设置 \"provider/model-id\",或在 TUI 里切换\n\n# 5. 添加 MCP server(可选,比如用于设计交付)\n# 在 opencode.json 的 \"mcp\" 字段下配置"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "五步配置流程:安装、用你的 provider key 认证、配置 AGENTS.md、添加 skill、验证", "caption": "配置顺序:安装 → 认证(你的 provider key)→ 配置 AGENTS.md → 添加 skill → 在真实浏览器中验证。"}, {"kind": "steps", "items": [{"label": "编码你的设计规则", "body": "把你的 tokens、基础组件和约定放进 AGENTS.md(或从中引用的 DESIGN.md),让产出贴合品牌而非退回通用观感。opencode.json 里的 instructions 选项可以用 glob 指向更多规则文件。"}, {"label": "选一个有能力的模型", "body": "因为 OpenCode 与模型无关,可以为设计这一遍挑选当下前端最强的 provider/模型——而工作流的其余部分保持不变。"}]}]}, {"id": "screenshot-workflow", "heading": "截图转 UI 的工作流", "blocks": [{"kind": "p", "text": "用任何 agent 做设计,杠杆最高的回路都是:把一张参考图变成可用、响应式的 UI,并反复迭代直到匹配。同样的五步在 OpenCode 里也适用。"}, {"kind": "ol", "items": ["从你手头最清晰的视觉参考开始——并包含多种状态(桌面和移动、hover、空态、加载态),而不只是一张主视觉。", "提示词要具体;含糊的提示会产出套路化的 UI。", "准备好一套设计系统,并告诉 OpenCode tokens 和规范基础组件在哪里(写在 AGENTS.md 里)。", "跑一个 dev server,让 agent 在真实浏览器中渲染,并切换到各断点检查结果。", "让 OpenCode 把它的实现对照截图来迭代——而不只是确认能构建通过。"]}, {"kind": "p", "text": "在 TUI 里用 @ 引用文件会对工作目录做模糊搜索,用开头的 ! 内联运行 shell 命令,用 / 命令驱动各种操作。然后用具体约束来提示:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# 在 TUI 里:\n> @reference-desktop.png @reference-mobile.png\n 用 React + Vite + Tailwind + TypeScript 实现这个设计。\n 复用 AGENTS.md 里我现有的设计系统组件和 tokens。\n 匹配间距、布局和层级;做到响应式。\n 运行 dev server,在浏览器中打开,并反复迭代\n 直到 UI 在各断点上都与参考图匹配。"}, {"kind": "p", "text": "提示词保持小而聚焦,好的迭代就提交、坏的就回退(回退时告诉 OpenCode),让每一遍都建立在一个干净的基础上。"}]}, {"id": "extend", "heading": "AGENTS.md、MCP 与可分享会话", "blocks": [{"kind": "p", "text": "三个扩展点让 OpenCode 在持续的设计工作中真正好用,而且它们都能干净地映射到一套开放的设计工作流上。"}, {"kind": "steps", "items": [{"label": "AGENTS.md 规则", "body": "项目规则放在仓库根目录的 AGENTS.md(或全局规则放在 ~/.config/opencode/AGENTS.md)。它是你设计约定的长期归宿,每次运行都会读取,并兼容其他 agent 使用的 CLAUDE.md 文件。"}, {"label": "MCP server", "body": "OpenCode 同时支持本地(命令)和远程(URL)MCP server,在 mcp 字段下配置——这是把设计上下文和外部工具引入进来的可移植方式,跨 agent 通用,而不只服务于 OpenCode。"}, {"label": "可分享会话", "body": "/share 命令会为一段会话创建公开链接,用于协作或评审,/unshare 则收回它——很适合为一遍设计获取反馈。"}]}, {"kind": "p", "text": "这些都是可移植、跨 agent 的能力——正是 Open Design 被设计来去编排的那类东西,而不是每个项目里重造一遍。"}]}, {"id": "vs", "heading": "OpenCode vs Codex vs Claude Code vs Cursor 做设计", "blocks": [{"kind": "p", "text": "设计工作没有唯一赢家——每个 agent 各有所长,有经验的团队会叠着用。一个公允的总结:"}, {"kind": "table", "columns": ["Agent", "设计强项", "最适合"], "rows": [["OpenCode", "开源且与模型无关;在一套终端工作流背后运行任意 provider", "BYOK 自由、切换模型、完全开放且本地优先的配置"], ["Codex", "配合前端 skill 的视觉打磨能力强;图像理解", "委托式异步、沙箱化构建、可移植的 AGENTS.md 规则"], ["Claude Code", "具体的设计决策(hex、间距、字体)和对代码库有感知的 UX", "前端推理和大上下文重构"], ["Cursor", "带实时预览和内联编辑的所见即所得回路", "IDE 内紧凑的边改边看 UI 工作"]]}, {"kind": "p", "text": "社区反复得出的结论是:审美来自人——所有这些 agent 在没有 skill、参考和约束时都会退回到通用观感。这才是真正要解决的问题——它是设计工具形状的,不是模型形状的,而这恰恰说明了为什么像 OpenCode 这样的开放 agent 与一个开放的设计层配合得如此之好。"}]}, {"id": "pitfalls", "heading": "坑,以及如何避开那种“AI 味”观感", "blocks": [{"kind": "p", "text": "对 AI 生成设计最常见的吐槽是它看起来很套路——柔和渐变、悬浮面板、过大的圆角、夸张的阴影,一种 Inter 字体加紫色的味道,“一看就是 AI 做的”。其他被报告的问题还包括移动端布局错乱、指令文字漏进了 UI 文案。这些都不是 OpenCode 独有的;它们是任何 agent 在缺少精选设计上下文时都会发生的事。"}, {"kind": "steps", "items": [{"label": "加一个审美 skill", "body": "一个精选的设计 skill 会强制 agent 定下一个真正的方向,而不是默认观感。"}, {"label": "在真实浏览器中验证", "body": "让它跨断点渲染并自检,这样布局就不会在移动端悄悄崩掉。"}, {"label": "提供 tokens 和参考", "body": "真实的设计 tokens 和参考截图是对产出质量影响最大的单一杠杆。"}, {"label": "把规则写进 AGENTS.md", "body": "把“不要 hero 卡片、最多两种字体、品牌优先层级”这类规则放在 agent 每次都会读到的地方。"}]}, {"kind": "p", "text": "注意到了吗:每一项缓解措施都是关于给 agent 一套精选的设计上下文——无论你跑哪个模型。靠手工逐项目维护这套上下文,正是 Open Design 帮你免除的苦活。"}]}, {"id": "open-design", "heading": "在 Open Design 中用 OpenCode 做设计", "blocks": [{"kind": "p", "text": "Open Design 正是上面那套工作流一直在呼唤的开源设计层。它把 OpenCode 当作一等适配器,并为它套上一套精选的 skill 与设计系统库、一条结构化的渲染管线,以及一个本地桌面 UI——让那些让任何 agent 变好的设计上下文从第一次运行就在那里,而不是每次都手工拼凑。两个项目都是开源、都本地优先,这让它们的搭配水到渠成。"}, {"kind": "ol", "items": ["安装 Open Design,并选择 OpenCode 作为你的 agent。", "用你自己的模型 provider API key(BYOK)认证——凭证留在你的机器上,绝不经我们代理。", "选择任意 provider 和模型,再加上一套设计系统和一个 skill,然后生成审美一致的 deck、原型和落地页。", "每个产物和 DESIGN.md 文件都存在你自己的仓库里,而不是托管云端。"]}, {"kind": "p", "text": "同一个 OpenCode agent、同样的模型自由——外加一套真正可移植、开源的设计工作流。它本地优先、采用 Apache-2.0 许可,所以你的工作和凭证都不会离开你的机器。"}]}], "faqTitle": "常见问题", "faq": [{"name": "OpenCode 真的能做设计吗?", "text": "能——当上下文里有审美 skill、设计系统和真实参考图时,OpenCode 能产出生产级、响应式的 UI,并能在浏览器中验证。因为它与模型无关,你可以运行当下前端最强的那个模型。缺少这套精选上下文时,它会倾向于退回到通用观感,而这正是 Open Design 补上的缺口。"}, {"name": "用 OpenCode 做设计该选哪个模型?", "text": "你喜欢哪个都行——OpenCode 经 models.dev 与 provider 无关,所以你可以在同一套工作流背后运行 Anthropic、OpenAI、Google、OpenRouter 或本地模型,并随时切换。设计产出的质量更多取决于你的 skill、设计系统和参考,而非单看模型。"}, {"name": "Open Design 是 OpenCode(SST)团队做的吗?", "text": "不是。Open Design 是一个独立的开源项目,把 OpenCode 集成为一个 agent。它用一套本地优先、开源的 skill 与设计系统库来补足 OpenCode。"}, {"name": "用 OpenCode 做设计需要什么特殊订阅吗?", "text": "不需要——OpenCode 是 BYOK。你自带模型 provider 的 API key,Open Design 绝不代理你的凭证,也没有厂商锁定。"}, {"name": "前端设计选 OpenCode、Codex 还是 Claude Code?", "text": "都很强,很多团队会叠着用。OpenCode 的优势在于完全开源且与模型无关;Codex 擅长委托式、沙箱化构建;Claude Code 以具体、对代码库有感知的设计决策著称。Open Design 让你切换 agent 而不改变你的设计工作流。"}, {"name": "如何为设计上下文扩展 OpenCode?", "text": "把规则写进 AGENTS.md,在 mcp 字段下添加 MCP server 以引入可移植工具和设计上下文,并用可分享会话来做评审。Open Design 直接提供一套精选的 skill 与设计系统库,让你省去逐项目的配置。"}, {"name": "Open Design 与 OpenCode 或 SST 有关联吗?", "text": "没有。OpenCode 是由 SST(Anomaly Innovations)维护的开源项目;Open Design 是一个独立的开源项目,把它作为一等适配器来支持。"}, {"name": "我的文件和凭证安全吗?", "text": "安全——Open Design 本地优先。你的文件、产物和 DESIGN.md 都留在你自己的仓库里,你的模型 provider 凭证由你的 agent 直接使用,绝不经 Open Design 服务器中转。"}], "ctaTitle": "用开放的方式,借 OpenCode 做设计。", "ctaBody": "自带你的模型 provider key,把每个文件留在本地,并为你已经在用的这个开放 agent 套上一套精选的设计库。", "ctaActions": [{"label": "在 Open Design 中使用 OpenCode", "href": "/quickstart/", "variant": "primary"}, {"label": "在 GitHub 上 Star", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "下载桌面应用", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "查看所有支持的 agent"}, + }, + }, + 'ja': { + 'claude-code': { + ...en['claude-code']!, + title: "デザインのための Claude Code — Open Design", + description: "デザイナーが UI と Web デザインに Claude Code をどう使うか、そして Open Design がそれを本物のデザインエージェントへと変える方法 — ローカルファースト、BYOK、厳選された skill とデザインシステムのライブラリ付き。", + breadcrumb: "Claude Code", + label: "エージェント · Claude Code", + heading: "デザインのための Claude Code。", + lead: "Claude Code は Anthropic のターミナル型コーディングエージェントです。すでに多くの人が UI、デザインシステム、ランディングページの構築に使っています。Open Design はそれを本物のデザインワークフローへと接続します — あなたの Anthropic キーや Claude サブスクリプションを使い、すべてのファイルをローカルに保ちます。", + rich: {"heroCtaLead": "Open Design は Claude Code をローカルファーストでオープンソースのデザインエージェントへと変えます — あなたの Anthropic キーや Claude サブスクリプション、あなたのファイル、そしてそれを取り巻く厳選された skill とデザインシステムのライブラリ。", "heroCtaActions": [{"label": "Open Design 内で Claude Code を使う", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub でスターを付ける", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "デスクトップアプリをダウンロード", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code は、フロントエンドのセンスが最も優れたコーディングエージェントとして広く評価されています — インターフェースについて並外れた具体性で推論し、正確な hex 値、余白、タイプスケールを指定し、大規模なコードベース全体にわたって筋を見失うことなく UI をリファクタリングします。しかし、デフォルトのままでは、デザインシステム、skills、本物のリファレンスを渡さない限り、ありきたりな見た目へと流れてしまいがちです。本稿は、UI・フロントエンド・デザインシステムの作業に Claude Code を使い、それを Open Design で構造化されたワークフローへ組み込むための、実践的でエンドツーエンドのガイドです。", "Claude Code が実際に何であるか、なぜフロントエンドに強いのか、ゼロからのセットアップ方法、CLAUDE.md と Skills のワークフロー、公式の Figma 往復連携、Codex や Cursor との比較、AI の出力をありきたりに見せてしまう落とし穴、そして Open Design がオープンでローカルファーストなデザインレイヤーとしてそのギャップをどう埋めるかを扱います。"], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Claude Code のデザインフィードバックループ: 具体的なデザイン判断を下すターミナルエージェント、UI を描画するブラウザ、ワークスペース、そして戻ってくるフィードバックの矢印", "caption": "中核となるループ: Claude Code がターミナルで具体的な UI 判断を推論し、実際のブラウザで描画・検証し、あなたのリファレンスへと収束させていきます。"}, "tocLabel": "このページの内容", "toc": [{"id": "what-is-claude-code", "label": "Claude Code とは実際に何か"}, {"id": "why-design", "label": "なぜ Claude Code はデザインが得意なのか"}, {"id": "setup", "label": "デザイン向けに Claude Code をセットアップする(ゼロから)"}, {"id": "skills-workflow", "label": "CLAUDE.md と Skills のワークフロー"}, {"id": "figma", "label": "Claude Code + Figma の往復連携"}, {"id": "vs", "label": "Claude Code vs Codex vs Cursor"}, {"id": "pitfalls", "label": "落とし穴と「AI スロップ」っぽい見た目"}, {"id": "open-design", "label": "Open Design で Claude Code を使ってデザインする"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-claude-code", "heading": "Claude Code とは実際に何か", "blocks": [{"kind": "p", "text": "Claude Code は Anthropic のエージェント型コーディングツールです。コードベースを読み、ファイルを編集し、コマンドを実行し、開発ツールと連携します — 単に行を補完するのではなく、自然言語のタスクから計画・記述・検証を行います。"}, {"kind": "p", "text": "同じエンジンを共有する複数の面で提供されます: ターミナル CLI、VS Code・Cursor・JetBrains 向けの IDE 拡張機能、ビジュアルな差分レビューを備えたデスクトップアプリ、そして長時間実行タスク向けの Web 体験。あなたの CLAUDE.md ファイル、設定、MCP サーバーはそのすべてに引き継がれます。"}, {"kind": "steps", "items": [{"label": "指示ファイル", "body": "Claude Code はセッション開始時にプロジェクトルートの CLAUDE.md ファイルを読み込みます — デザインの規約、tokens、レビューのチェックリストを記述する自然な場所です。"}, {"label": "Skills", "body": "Agent Skills は、繰り返し使う指示・スクリプト・リソースをパッケージ化し、Claude がオンデマンドで読み込みます。Anthropic 公式の Frontend Design skill によるセンスの付与も含まれます。"}, {"label": "計画とサブエージェント", "body": "実行前に計画を立て、タスクの異なる部分を並行して進めるサブエージェントを生成できます。これにより大規模な UI リファクタリングの一貫性が保たれます。"}]}, {"kind": "ul", "items": ["ベンダー: Anthropic", "認証情報: Anthropic API キー(BYOK、Console 経由)または Claude サブスクリプション(Pro / Max)", "提供面: ターミナル CLI、VS Code / Cursor / JetBrains 拡張機能、デスクトップアプリ、Web"]}]}, {"id": "why-design", "heading": "なぜ Claude Code はデザインが得意なのか", "blocks": [{"kind": "p", "text": "コーディングエージェントの中でも、Claude Code はフロントエンド作業のセンスに定評があります。それにはいくつかの理由があります。"}, {"kind": "steps", "items": [{"label": "曖昧でなく具体的な判断", "body": "Claude Code は、曖昧にごまかすのではなく具体的な選択 — 正確な hex 値、余白スケール、タイプランプ、コンポーネント階層 — にコミットする傾向があります。これこそが本物のインターフェースとプレースホルダーを分けるものです。"}, {"label": "コードベースを踏まえた推論", "body": "大きな作業コンテキストを活かして多数のファイルにまたがる UI を一度にリファクタリングし、その場限りのスタイルを発明するのではなく、既存のコンポーネントや tokens を再利用します。"}, {"label": "公式のフロントエンド skill", "body": "Anthropic は Frontend Design skill を提供しており、Claude にまずデザインの方向性を書かせ、ありきたりなシステムフォントや予測可能な紫のグラデーションから意図的に距離を取らせます。"}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "デザインシステム、skill、リファレンス画像が良いデザイン出力へと収束する様子を示す図", "caption": "センスはあなたが与える 3 つの入力から生まれます: デザインシステム、skill、本物のリファレンス画像。"}, {"kind": "p", "text": "教訓は Anthropic が自社モデルについて語るのと同じです: Claude はデフォルトではセンスを持っていません — 放っておけば Web デザインの統計的な中心(Inter、紫のグラデーション、柔らかい影)へと収束します。制約を与えたときに良いデザインを生み出します。Open Design はまさにそれらの入力をパッケージ化しており、だからこそ両者は噛み合うのです(詳細は後述)。"}]}, {"id": "setup", "heading": "デザイン作業のために Claude Code をゼロからセットアップする", "blocks": [{"kind": "p", "text": "まっさらなマシンから、UI を構築・検証できる Claude Code までの全行程はこちらです。"}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "5 ステップのセットアップフロー: インストール、認証、CLAUDE.md 設定、skill 追加、検証", "caption": "セットアップの手順: インストール → 認証 → CLAUDE.md を設定 → Frontend Design skill を追加 → ブラウザ検証を有効化。"}, {"kind": "steps", "items": [{"label": "デザインルールを記述する", "body": "tokens、プリミティブ、規約を CLAUDE.md に書き、Claude にそれを参照させましょう。そうすれば出力がありきたりな見た目に落ち着かず、ブランドに沿ったものになります。"}, {"label": "ブラウザ検証を追加する", "body": "Playwright や Chrome MCP を接続し、Claude が実際のブラウザで描画して、ビルドが通ることだけを確認するのではなく、ブレークポイントをまたいで出力を検証するようにします。"}]}]}, {"id": "skills-workflow", "heading": "CLAUDE.md と Skills のワークフロー", "blocks": [{"kind": "p", "text": "Claude Code で最も効果の高いデザインのループは、本物のリファレンスとあなたのデザインコンテキストを与え、UI が一致するまで反復することです — CLAUDE.md と Skills が制約を運んでくれるので、プロンプトごとに説明し直す必要がありません。"}, {"kind": "ol", "items": ["手元にある最も明確なビジュアルリファレンスから始めましょう — そして 1 枚のヒーローショットだけでなく、複数の状態(デスクトップとモバイル、ホバー、空、ローディング)を含めます。", "プロンプトでは具体的に。曖昧なプロンプトは、強力なエージェントを使ってもありきたりな UI を生みます。", "デザインシステムと規約を CLAUDE.md に保ち、tokens と正規のプリミティブがどこにあるかを Claude に伝えます。", "Frontend Design skill を追加し、コードを書く前に Claude が本物の美的方向性にコミットするようにします。", "ブラウザ検証を接続し、Claude が描画し、ブレークポイントへリサイズし、リファレンスと照合し直す — 単にビルドが通ることを確認するだけにしないようにします。"]}, {"kind": "p", "text": "リファレンス画像をセッションに投入し、具体的な制約を添えてプロンプトを出します:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "並行して dev サーバーを動かし、プロンプトを小さく焦点を絞って保ち、良い反復はコミットし、悪い反復は元に戻す(戻したことを Claude に伝える)ことで、各パスがクリーンなベースの上に積み上がるようにします。大きなリファクタリングではプランモードを使い、ファイルが変更される前にアプローチをレビューできるようにします。"}]}, {"id": "figma", "heading": "Claude Code + Figma: デザイン ↔ コードの往復", "blocks": [{"kind": "p", "text": "2026 年 2 月、Anthropic と Figma は Figma MCP サーバーを介した第一級の双方向連携を提供しました。これは両方向で機能します。"}, {"kind": "steps", "items": [{"label": "デザイン → コード", "body": "Figma でフレームを選択するか、リンクを Claude Code に貼り付けてデザインコンテキストを取り込み、既存のコンポーネントライブラリを使って実装するよう依頼します。Code Connect が出力を実際のコンポーネントと整合させます。"}, {"label": "コード → デザイン", "body": "機能をブラウザで構築・プレビューし、「これを Figma に送って」と言えば、動作中の UI を編集可能な Figma レイヤーとして取り込みます — 画面全体でも、選択した要素だけでも可能です。"}]}, {"kind": "p", "text": "claude plugin install figma@claude-plugins-official で一度インストールすれば使えます(Dev Mode MCP には有料の Figma プランが必要です)。同じ Figma MCP は Claude Code、Codex、Cursor、VS Code で利用でき — まさに Open Design が編成するために作られた、ポータブルでマルチエージェントな機能です。"}]}, {"id": "vs", "heading": "デザインにおける Claude Code vs Codex vs Cursor", "blocks": [{"kind": "p", "text": "デザイン作業に唯一の勝者は存在しません — 各エージェントには異なる強みがあり、経験豊富なチームはそれらを重ねて使います。公平にまとめると:"}, {"kind": "table", "columns": ["エージェント", "デザインの強み", "適した用途"], "rows": [["Claude Code", "具体的なデザイン判断(hex、余白、タイプ)とコードベースを踏まえた UX 推論", "フロントエンドの推論と大規模コンテキストのリファクタリング"], ["Codex", "高いビジュアルの仕上がりと画像理解力、サンドボックス化された非同期ビルド", "委任された非同期ビルドとポータブルな AGENTS.md ルール"], ["Cursor", "ライブプレビューとインライン編集を備えた、作って見るビジュアルループ", "IDE 内での緊密な反復・観察型の UI 作業"]]}, {"kind": "p", "text": "コミュニティで繰り返される結論は、センスは人間から生まれるということです: 3 つとも、skills・リファレンス・制約がなければありきたりな美意識へと落ち着きます。それこそが解くべき本当の問題であり — それはモデルの形ではなく、デザインツールの形をしています。"}]}, {"id": "pitfalls", "heading": "落とし穴、そして「AI スロップ」っぽい見た目を避ける方法", "blocks": [{"kind": "p", "text": "Claude Code のセンスへの定評をもってしても、AI 生成デザインへの最もよくある不満は、ありきたりに見えるというものです — Inter フォント、白地に紫のグラデーション、柔らかい影、過大な角丸、「いかにも AI が作りました」と叫ぶような美意識。Anthropic 自身もこれを分布的収束のせいだとしています: 無難な選択が Web の学習データを支配しているのです。ほかにも、モバイルレイアウトの崩れや、指示が UI のコピーに漏れ出す問題が報告されています。"}, {"kind": "steps", "items": [{"label": "Frontend Design skill をインストールする", "body": "Claude に本物の方向性へコミットさせ、AI が使いすぎているフォントやグラデーションを明示的に避けさせます。"}, {"label": "ブラウザ検証を有効化する", "body": "Claude にブレークポイントをまたいで描画と自己チェックをさせ、レイアウトがモバイルで黙って崩れないようにします。"}, {"label": "tokens とリファレンスを供給する", "body": "本物のデザイン tokens とリファレンスのスクリーンショットは、出力品質に対する最大の単一のレバーです。"}, {"label": "ルールを CLAUDE.md に記述する", "body": "「ヒーローカードなし、書体は最大 2 つ、ブランド優先の階層」といったスタイルルールを、エージェントが毎回読む場所に置きます。"}]}, {"kind": "p", "text": "どの対策も、エージェントに厳選されたデザインコンテキストを与えることが要だと気づくでしょう。そのコンテキストをプロジェクトごとに手作業で維持する手間こそ、Open Design が取り除くものです。"}]}, {"id": "open-design", "heading": "Open Design の中で Claude Code を使ってデザインする", "blocks": [{"kind": "p", "text": "Open Design は、上記のワークフローが繰り返し求めてくるオープンソースのデザインレイヤーです。Claude Code を第一級のアダプターとして扱い、厳選された skill とデザインシステムのライブラリ、構造化されたレンダーパイプライン、ローカルなデスクトップ UI でそれを包みます — そのため、Claude Code を優れたものにするデザインコンテキストが、毎回手作業で組み立てるのではなく、最初の実行から揃っています。"}, {"kind": "ol", "items": ["Open Design をインストールし、エージェントとして Claude Code を選びます。", "Anthropic API キー(BYOK)または Claude サブスクリプションで認証します — 認証情報はあなたのマシンに留まり、私たちを経由してプロキシされることは決してありません。", "デザインシステムと skill を選び、一貫したセンスでデッキ、プロトタイプ、ランディングページを生成します。", "あらゆる成果物と DESIGN.md ファイルは、ホスト型クラウドではなくあなた自身のリポジトリに置かれます。"]}, {"kind": "p", "text": "同じ Claude Code エージェント、同じキー — それに加えて、それを取り巻く本物でポータブルなオープンソースのデザインワークフロー。ローカルファーストで Apache-2.0 なので、あなたの作業も認証情報も、マシンの外へ出ることはありません。"}]}], "faqTitle": "よくある質問", "faq": [{"name": "Claude Code はデザイン作業に向いていますか?", "text": "はい — フロントエンドのセンスが最も優れたコーディングエージェントとして広く評価されており、hex 値、余白、タイプスケールについて具体的でコードベースを踏まえた判断を下します。Frontend Design skill、デザインシステム、本物のリファレンス画像をコンテキストに与えれば、本番品質でレスポンシブな UI を生み出し、ブラウザで検証できます。そのコンテキストがなければありきたりな見た目に落ち着きがちで、それこそ Open Design が埋めるギャップです。"}, {"name": "Claude Code でデザインするには Claude サブスクリプションが必要ですか?", "text": "Anthropic API キー(BYOK、Console 経由)か Claude サブスクリプション(Pro / Max)のどちらでも使えます。いずれの場合も Open Design があなたの認証情報をプロキシすることはありません — それらはあなたのマシン上のエージェントが直接使います。"}, {"name": "フロントエンドデザインには Claude Code と Codex のどちらがよいですか?", "text": "どちらも強力です。Claude Code は具体的でコードベースを踏まえたデザイン判断とフロントエンドの推論で知られ、Codex は高いビジュアルの仕上がりを持ち、委任されたサンドボックス化ビルドに優れます。多くのチームが両方を使います — Open Design ならデザインワークフローを変えずにエージェントを切り替えられます。"}, {"name": "Claude Code を Figma に接続するには?", "text": "claude plugin install figma@claude-plugins-official で公式の Figma プラグインをインストールします。その後、デザインコンテキストを使って Figma フレームをコードで実装でき、「これを Figma に送って」で動作中の UI を編集可能な Figma フレームへ戻せます。Dev Mode MCP には有料の Figma プランが必要です。"}, {"name": "Skills と CLAUDE.md とは何ですか?", "text": "CLAUDE.md はプロジェクトルートにある markdown ファイルで、Claude Code がセッション開始時に読み込みます — デザインの規約を記述する場所です。Skills は繰り返し使う指示とリソースをパッケージ化し、Claude がオンデマンドで読み込みます。Anthropic 公式の Frontend Design skill も含まれます。Open Design は両方の厳選されたライブラリを提供するので、プロジェクトごとのセットアップを省けます。"}, {"name": "ありきたりな「AI スロップ」の美意識を避けるには?", "text": "Frontend Design skill をインストールし、本物のデザイン tokens とリファレンスのスクリーンショットを供給し、ブランドルールを CLAUDE.md に記述し、ブラウザ検証を有効にします。Open Design はこれらを厳選されたライブラリとして提供するので、プロジェクトごとのセットアップを省けます。"}, {"name": "Open Design は Anthropic と提携していますか?", "text": "いいえ。Claude Code は Anthropic の製品であり、Open Design はそれを第一級のアダプターとしてサポートする、独立したオープンソースプロジェクトです。Claude と Claude Code は Anthropic の商標です。"}, {"name": "私のファイルと認証情報は安全ですか?", "text": "はい — Open Design はローカルファーストで Apache-2.0 です。あなたのファイル、成果物、DESIGN.md はあなた自身のリポジトリに留まり、Anthropic の認証情報はあなたのエージェントが直接使い、Open Design のサーバーを経由してルーティングされることは決してありません。"}], "ctaTitle": "Claude Code で、オープンな方法でデザインしよう。", "ctaBody": "あなた自身の Anthropic キーや Claude サブスクリプションを持ち込み、すべてのファイルをローカルに保ち、すでに使っているエージェントを取り巻く厳選されたデザインライブラリを手に入れましょう。", "ctaActions": [{"label": "Open Design 内で Claude Code を使う", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub でスターを付ける", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "デスクトップアプリをダウンロード", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "対応エージェントをすべて見る"}, + }, + 'codex': { + ...en['codex']!, + title: "デザインのための Codex — Open Design", + description: "人々が UI と Web デザインに OpenAI Codex をどう使うか — Product Design プラグイン、Figma 連携、フロントエンドの skills — そして Open Design が Codex をローカルファーストでオープンソースのデザインエージェントへと変える方法。", + breadcrumb: "Codex", + label: "エージェント · Codex", + heading: "デザインのための Codex。", + lead: "Codex は OpenAI のコーディングエージェントです。Product Design プラグインと Figma 連携によって、本格的なデザインツールになりました。Open Design は Codex をオープンソースのデザインワークフローへと接続します — あなたの OpenAI キーや ChatGPT サブスクリプション、あなたのファイル、ローカルファースト。", + rich: {"heroCtaLead": "Open Design は Codex をローカルファーストでオープンソースのデザインエージェントへと変えます — あなたの OpenAI キー、あなたのファイル、そしてそれを取り巻く厳選された skill とデザインシステムのライブラリ。", "heroCtaActions": [{"label": "Open Design 内で Codex を使う", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub でスターを付ける", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "デスクトップアプリをダウンロード", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex はコードジェネレーターとして始まりましたが、2026 年には本物のインターフェースをデザインする信頼できるツールになりました — 適切なリファレンス、skills、検証ループを与えればの話です。本稿は、UI・フロントエンド・デザインシステムの作業に Codex を使い、それを Open Design で構造化されたデザインワークフローへ組み込むための、実践的でエンドツーエンドのガイドです。", "今日の Codex が何であるか、なぜ急にフロントエンドが得意になったのか、ゼロからのセットアップ方法、スクリーンショットから UI へのループ、公式の Figma 往復連携、Cursor や Claude Code との比較、AI の出力をありきたりに見せてしまう落とし穴、そして Open Design がオープンでローカルファーストなデザインレイヤーとしてそのギャップをどう埋めるかを扱います。"], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Codex のデザインフィードバックループ: ターミナルエージェント、UI を描画するブラウザ、ワークスペース、そして戻ってくるフィードバックの矢印", "caption": "中核となるループ: Codex がターミナルで UI を構築し、実際のブラウザで描画・検証し、あなたのリファレンスへ向けて反復します。"}, "tocLabel": "このページの内容", "toc": [{"id": "what-is-codex", "label": "OpenAI Codex とは実際に何か"}, {"id": "why-design", "label": "なぜ Codex は今やデザインが得意なのか"}, {"id": "setup", "label": "デザイン向けに Codex をセットアップする(ゼロから)"}, {"id": "screenshot-workflow", "label": "スクリーンショットから UI へのワークフロー"}, {"id": "figma", "label": "Codex + Figma の往復連携"}, {"id": "vs", "label": "Codex vs Cursor vs Claude Code"}, {"id": "pitfalls", "label": "落とし穴と「AI スロップ」っぽい見た目"}, {"id": "open-design", "label": "Open Design で Codex を使ってデザインする"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-codex", "heading": "OpenAI Codex とは実際に何か(そして何でないか)", "blocks": [{"kind": "p", "text": "まず、「Codex」を検索するほぼ全員がつまずく区別から。元々の OpenAI Codex は、初期の GitHub Copilot を支えた 2021 年のコード補完モデルで、2023 年に提供終了しました。本ページが扱うのはそれではありません。今日の Codex は OpenAI のエージェント型コーディングツールであり — 自然言語のタスクから計画・記述・実行・検証を行います。"}, {"kind": "p", "text": "現代の Codex は 4 つの面で提供されます: ターミナル CLI(Rust で書き直され、Apache-2.0 ライセンス)、VS Code・Cursor・Windsurf 向けの IDE 拡張機能、委任された非同期タスク向けのクラウド/Web 体験、そしてアプリ内ブラウザと Computer Use を備えたデスクトップアプリ。"}, {"kind": "steps", "items": [{"label": "デフォルトモデル", "body": "2026 年半ば時点で推奨モデルは gpt-5.5 で、gpt-5.4 は OpenAI がフロントエンドと computer use のために明示的に訓練したモデルです。"}, {"label": "指示ファイル", "body": "Codex はプロジェクト内の AGENTS.md ファイル(ツール横断の標準)をプロジェクトルールとして読み込みます — デザインの規約を記述する自然な場所です。"}, {"label": "サンドボックス", "body": "カーネルレベルのサンドボックス(デフォルトは workspace-write)で動作するため、UI を編集するエージェントがプロジェクトの外をさまようことはありません。"}]}, {"kind": "ul", "items": ["ベンダー: OpenAI", "認証情報: OpenAI API キー(BYOK)または ChatGPT サブスクリプション(Free / Go / Plus / Pro / Business / Enterprise)", "CLI のライセンス: Apache-2.0、オープンソース"]}]}, {"id": "why-design", "heading": "なぜ Codex は今やデザインが得意なのか", "blocks": [{"kind": "p", "text": "2026 年初頭、3 つの要素が重なり、Codex はありきたりなコードジェネレーターではなく本物のデザインツールになりました。"}, {"kind": "steps", "items": [{"label": "フロントエンド向けに訓練されたモデル", "body": "OpenAI は GPT-5.4 を投入しました。これはフロントエンドと computer use のために訓練された初の主力モデルで、デザインワークフロー全体で画像理解が大幅に向上し、自己検証も強化されています。最終アセットを確定する前に、ムードボードやビジュアルの選択肢を生成することさえできます。"}, {"label": "公式のフロントエンド skill", "body": "openai/skills カタログには、本物のセンスを徹底するフロントエンド skill が用意されています: カードレスなレイアウト、フルブリードのヒーロー、ブランド優先の階層、抑制されたモーション、最大 2 つの書体と 1 つのアクセントカラー — そして構築前に Codex にビジュアルのテーゼを書かせます。"}, {"label": "ブラウザ検証", "body": "Playwright skill を使えば、Codex は実際のブラウザを開き、ブレークポイントへリサイズし、ビルドが通ることだけを確認するのではなく、出力をリファレンスと照合し直します。"}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "デザインシステム、skill、リファレンス画像が良いデザイン出力へと収束する様子を示す図", "caption": "センスはあなたが与える 3 つの入力から生まれます: デザインシステム、skill、本物のリファレンス画像。"}, {"kind": "p", "text": "3 つすべての背後にある教訓: Codex はデフォルトではセンスを持っていません。制約 — デザインシステム、美的な skill、具体的なリファレンス — を与えたときに良いデザインを生み出します。Open Design はまさにそれらの入力をパッケージ化しており、だからこそ両者は噛み合うのです(詳細は後述)。"}]}, {"id": "setup", "heading": "デザイン作業のために Codex をゼロからセットアップする", "blocks": [{"kind": "p", "text": "まっさらなマシンから、UI を構築・検証できる Codex までの全行程はこちらです。"}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "5 ステップのセットアップフロー: インストール、認証、設定、skill インストール、検証", "caption": "セットアップの手順: インストール → 認証 → AGENTS.md を設定 → フロントエンド skill をインストール → ブラウザ検証を有効化。"}, {"kind": "steps", "items": [{"label": "デザインルールを記述する", "body": "tokens、プリミティブ、規約を AGENTS.md または DESIGN.md に書き、Codex にそれを参照させましょう。そうすれば出力がありきたりな見た目に落ち着かず、ブランドに沿ったものになります。"}, {"label": "適切な reasoning レベルを選ぶ", "body": "OpenAI は、最高設定よりも低〜中程度の reasoning レベルのほうがフロントエンドの結果が優れることが多いと指摘しています。"}]}]}, {"id": "screenshot-workflow", "heading": "スクリーンショットから UI へのワークフロー", "blocks": [{"kind": "p", "text": "Codex で最も効果の高いデザインのループは、リファレンス画像を動作するレスポンシブな UI に変え、一致するまで反復することです。OpenAI 自身のガイダンスは 5 つのステップに集約されます。"}, {"kind": "ol", "items": ["手元にある最も明確なビジュアルリファレンスから始めましょう — そして 1 枚のヒーローショットだけでなく、複数の状態(デスクトップとモバイル、ホバー、空、ローディング)を含めます。", "プロンプトでは具体的に。曖昧なプロンプトはありきたりな UI を生みます。", "デザインシステムを用意し、tokens と正規のプリミティブがどこにあるかを Codex に伝えます。", "Playwright のインタラクティブ skill を有効にし、Codex が実際のブラウザで描画し、ブレークポイントへリサイズするようにします。", "Codex に実装をスクリーンショットと照合し直させて反復します — 単にビルドが通ることを確認するだけにしないようにします。"]}, {"kind": "p", "text": "スクリーンショットをターミナルにドラッグするか image フラグで画像を渡し、具体的な制約を添えてプロンプトを出します:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "2 つ目のターミナルで dev サーバーを動かし、プロンプトを小さく焦点を絞って保ち、良い反復はコミットし、悪い反復は元に戻す(戻したことを Codex に伝える)ことで、各パスがクリーンなベースの上に積み上がるようにします。"}]}, {"id": "figma", "heading": "Codex + Figma: デザイン ↔ コードの往復", "blocks": [{"kind": "p", "text": "2026 年 2 月、OpenAI と Figma は公式パートナーシップを発表し、以前の Figma MCP ベータを第一級の双方向連携へと進化させました。これは両方向で機能します。"}, {"kind": "steps", "items": [{"label": "デザイン → コード", "body": "Figma でフレームの「link to selection」をコピーし、それを get_design_context とともに Codex に貼り付け、既存のコンポーネントライブラリを使って実装するよう依頼します。"}, {"label": "コード → デザイン", "body": "generate_figma_design ツール(「Code to Canvas」)は、ライブで動作中の UI を編集可能な Figma フレームへ戻します — 画面全体、選択した要素、ファイル全体のいずれでも可能です。"}]}, {"kind": "p", "text": "Figma MCP はリモートサーバーとして動作し、レート制限の対象外です。一度追加すれば、Codex、Claude Code、Cursor、VS Code などで利用できます — まさに Open Design が編成するために作られた、ポータブルでマルチエージェントな機能です。"}]}, {"id": "vs", "heading": "デザインにおける Codex vs Cursor vs Claude Code", "blocks": [{"kind": "p", "text": "デザイン作業に唯一の勝者は存在しません — 各エージェントには異なる強みがあり、経験豊富なチームはそれらを重ねて使います。公平にまとめると:"}, {"kind": "table", "columns": ["エージェント", "デザインの強み", "適した用途"], "rows": [["Codex", "GPT-5.4 + フロントエンド skill による高いビジュアルの仕上がり、画像理解", "委任された非同期ビルド、サンドボックス実行、ポータブルな AGENTS.md ルール"], ["Cursor", "ライブプレビューとインライン編集を備えた、作って見るビジュアルループ", "IDE 内での緊密な反復・観察型の UI 作業"], ["Claude Code", "具体的なデザイン判断(hex、余白、タイプ)とコードベースを踏まえた UX", "フロントエンドの推論と大規模コンテキストのリファクタリング"]]}, {"kind": "p", "text": "コミュニティで繰り返される結論は、センスは人間から生まれるということです: 3 つとも、skills・リファレンス・制約がなければありきたりな美意識へと落ち着きます。それこそが解くべき本当の問題であり — それはモデルの形ではなく、デザインツールの形をしています。"}]}, {"id": "pitfalls", "heading": "落とし穴、そして「AI スロップ」っぽい見た目を避ける方法", "blocks": [{"kind": "p", "text": "Codex 生成デザインへの最もよくある不満は、ありきたりに見えるというものです — 柔らかいグラデーション、浮いたパネル、過大な角丸、ドラマチックな影、「いかにも AI が作りました」と叫ぶような Inter と紫の雰囲気。ほかにも、モバイルレイアウトの崩れ、指示が UI のコピーに漏れ出すこと、利用上限にすぐ達することが報告されています。"}, {"kind": "steps", "items": [{"label": "フロントエンド skill をインストールする", "body": "厳選された美的な skill は、Codex にデフォルトの見た目ではなく本物の方向性へコミットさせます。"}, {"label": "Playwright 検証を有効化する", "body": "Codex にブレークポイントをまたいで描画と自己チェックをさせ、レイアウトがモバイルで黙って崩れないようにします。"}, {"label": "tokens とリファレンスを供給する", "body": "本物のデザイン tokens とリファレンスのスクリーンショットは、出力品質に対する最大の単一のレバーです。"}, {"label": "ルールを AGENTS.md に記述する", "body": "「ヒーローカードなし、書体は最大 2 つ、ブランド優先の階層」といったスタイルルールを、エージェントが毎回読む場所に置きます。"}]}, {"kind": "p", "text": "どの対策も、エージェントに厳選されたデザインコンテキストを与えることが要だと気づくでしょう。そのコンテキストをプロジェクトごとに手作業で維持する手間こそ、Open Design が取り除くものです。"}]}, {"id": "open-design", "heading": "Open Design の中で Codex を使ってデザインする", "blocks": [{"kind": "p", "text": "Open Design は、上記のワークフローが繰り返し求めてくるオープンソースのデザインレイヤーです。Codex を第一級のアダプターとして扱い、厳選された skill とデザインシステムのライブラリ、構造化されたレンダーパイプライン、ローカルなデスクトップ UI でそれを包みます — そのため、Codex を優れたものにするデザインコンテキストが、毎回手作業で組み立てるのではなく、最初の実行から揃っています。"}, {"kind": "ol", "items": ["Open Design をインストールし、エージェントとして Codex を選びます。", "OpenAI API キー(BYOK)または ChatGPT サブスクリプションで認証します — 認証情報はあなたのマシンに留まり、私たちを経由してプロキシされることは決してありません。", "デザインシステムと skill を選び、一貫したセンスでデッキ、プロトタイプ、ランディングページを生成します。", "あらゆる成果物と DESIGN.md ファイルは、ホスト型クラウドではなくあなた自身のリポジトリに置かれます。"]}, {"kind": "p", "text": "同じ Codex エージェント、同じキー — それに加えて、それを取り巻く本物でポータブルなオープンソースのデザインワークフロー。ローカルファーストで Apache-2.0 なので、あなたの作業も認証情報も、マシンの外へ出ることはありません。"}]}], "faqTitle": "よくある質問", "faq": [{"name": "OpenAI Codex は本当にデザイン作業ができますか?", "text": "はい — フロントエンド skill、デザインシステム、本物のリファレンス画像をコンテキストに与えれば、Codex(特に GPT-5.4)は本番品質でレスポンシブな UI を生み出し、ブラウザで検証できます。そのコンテキストがなければありきたりな見た目に落ち着きがちで、それこそ Open Design が埋めるギャップです。"}, {"name": "これは OpenAI Codex の Product Design プラグインですか?", "text": "いいえ。Open Design は Codex をエージェントとして統合する、独立したオープンソースプロジェクトです。OpenAI 自身のツールを、ローカルファーストでオープンな skill とデザインシステムのライブラリで補完します。"}, {"name": "Codex でデザインするには ChatGPT サブスクリプションが必要ですか?", "text": "OpenAI API キー(BYOK)か ChatGPT サブスクリプションのどちらでも使えます。ChatGPT でのサインインのほうが一般的に上限が寛大ですが、いずれの場合も Open Design があなたの認証情報をプロキシすることはありません。"}, {"name": "フロントエンドデザインには Codex と Claude Code のどちらがよいですか?", "text": "どちらも強力です。Claude Code は具体的でコードベースを踏まえたデザイン判断で知られ、Codex は GPT-5.4 以降の高いビジュアルの仕上がりを持ち、委任されたサンドボックス化ビルドに優れます。多くのチームが両方を使います — Open Design ならデザインワークフローを変えずにエージェントを切り替えられます。"}, {"name": "Codex を Figma に接続するには?", "text": "公式の Figma MCP サーバーを追加します(codex mcp add figma --url https://mcp.figma.com/mcp)。その後、get_design_context で Figma フレームをコードで実装でき、generate_figma_design で動作中の UI を編集可能な Figma フレームへ戻せます。"}, {"name": "ありきたりな「AI スロップ」の美意識を避けるには?", "text": "フロントエンド skill をインストールし、本物のデザイン tokens とリファレンスのスクリーンショットを供給し、ブランドルールを AGENTS.md に記述し、Playwright 検証を有効にします。Open Design はこれらを厳選されたライブラリとして提供するので、プロジェクトごとのセットアップを省けます。"}, {"name": "Open Design は OpenAI と提携していますか?", "text": "いいえ。Codex は OpenAI の製品であり、Open Design はそれを第一級のアダプターとしてサポートする、独立したオープンソースプロジェクトです。OpenAI と Codex は OpenAI の商標です。"}, {"name": "私のファイルと認証情報は安全ですか?", "text": "はい — Open Design はローカルファーストです。あなたのファイル、成果物、DESIGN.md はあなた自身のリポジトリに留まり、OpenAI の認証情報はあなたのエージェントが直接使い、Open Design のサーバーを経由してルーティングされることは決してありません。"}], "ctaTitle": "Codex で、オープンな方法でデザインしよう。", "ctaBody": "あなた自身の OpenAI キーを持ち込み、すべてのファイルをローカルに保ち、すでに使っているエージェントを取り巻く厳選されたデザインライブラリを手に入れましょう。", "ctaActions": [{"label": "Open Design 内で Codex を使う", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub でスターを付ける", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "デスクトップアプリをダウンロード", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "対応エージェントをすべて見る"}, + }, + 'cursor': { + ...en['cursor']!, + title: "デザイナーのための Cursor — Open Design", + description: "デザイナーが UI と Web デザインに Cursor をどう使うか — Design Mode、Figma からコードへ、Figma MCP — そして Open Design が Cursor をローカルファーストでオープンソースのデザインエージェントへと変える方法。", + breadcrumb: "Cursor", + label: "エージェント · Cursor", + heading: "デザイナーのための Cursor。", + lead: "Cursor は AI コードエディタで、いまやビジュアルな Design Mode を備えています。デザイナーはこれを使い、ポイントして描くことで UI を編集し、Figma をコードに変換します。Open Design は Cursor Agent をオープンソースのデザインワークフローへと接続し、あなたのファイルをローカルに保ちます。", + rich: {"heroCtaLead": "Open Design は Cursor をローカルファーストでオープンソースのデザインエージェントへと変えます — あなたの Cursor アカウントやモデルキー、あなたのファイル、そしてそれを取り巻く厳選された skill とデザインシステムのライブラリ。", "heroCtaActions": [{"label": "Open Design 内で Cursor を使う", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub でスターを付ける", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "デスクトップアプリをダウンロード", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor は AI ファーストのコードエディタで、「作って描画されるのを見る」を UI を出荷するデフォルトの方法にしました。Agent モード、インライン編集、エディタ内プレビュー、MCP 経由の Figma により、本物のデザインツールになりました — 適切なリファレンス、ルール、検証ループを与えればの話です。本稿は、UI・フロントエンド・デザインシステムの作業に Cursor を使い、それを Open Design で構造化されたデザインワークフローへ組み込むための、実践的でエンドツーエンドのガイドです。", "Cursor が実際に何であるか、なぜその緊密な反復・観察ループがデザインに向いているのか、ゼロからのセットアップ方法、スクリーンショットとプレビューから UI へのループ、MCP 経由の Figma 往復連携、Codex や Claude Code との比較、AI の出力をありきたりに見せてしまう落とし穴、そして Open Design がオープンでローカルファーストなデザインレイヤーとしてそのギャップをどう埋めるかを扱います。"], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Cursor のデザイン収束: 左にエディタ、中央に Cursor マークを中心とした厳選された skill とデザインシステムのハブ、右に描画された UI", "caption": "中核となる発想: Cursor がエディタ内で UI を編集・描画する一方、厳選されたデザインハブが、出力を意図的に見せるシステム・skills・リファレンスを供給します。"}, "tocLabel": "このページの内容", "toc": [{"id": "what-is-cursor", "label": "Cursor とは実際に何か"}, {"id": "why-design", "label": "なぜ Cursor はデザインが得意なのか"}, {"id": "setup", "label": "デザイン向けに Cursor をセットアップする(ゼロから)"}, {"id": "preview-workflow", "label": "プレビューから UI へのワークフロー"}, {"id": "figma", "label": "MCP 経由の Cursor + Figma"}, {"id": "vs", "label": "Cursor vs Codex vs Claude Code"}, {"id": "pitfalls", "label": "落とし穴と「AI スロップ」っぽい見た目"}, {"id": "open-design", "label": "Open Design で Cursor を使ってデザインする"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-cursor", "heading": "Cursor とは実際に何か", "blocks": [{"kind": "p", "text": "Cursor は Anysphere が開発した AI ファーストのコードエディタです。VS Code のフォークなので、見慣れたエディタ、拡張機能、キーバインドはそのままに、プロジェクト全体を読み、複数のファイルを編集し、コマンドを実行し、あなたをループに入れて反復できる AI エージェントを中心にワークフローを作り直しています。"}, {"kind": "p", "text": "デザイン作業にとって重要な面は、Agent モード(成果を記述すると Cursor がファイルをまたいで計画・編集します)、素早い微調整のためのインライン編集と Tab 補完、ウィンドウを離れずに動作中の UI を見られるエディタ内プレビュー/ブラウザ、そしてライブの Figma ファイルのような外部コンテキストを取り込める MCP サポートです。"}, {"kind": "steps", "items": [{"label": "プロジェクトルール", "body": "Cursor はプロジェクトの指示ファイルを読み込みます — `.cursor/rules` 配下のバージョン管理された `.mdc` ルールと、プレーンな `AGENTS.md` — そのため、エージェントが毎回読む場所にデザインの規約を記述できます。"}, {"label": "モデル", "body": "Cursor はモデルに柔軟です: サブスクリプション経由でフロンティアモデルを提供し、独自のモデルキーの持ち込みもサポートするので、同じエディタワークフローの背後にあるエンジンを選べます。"}, {"label": "MCP", "body": "Model Context Protocol を話すので、外部サーバー — 最も関連性が高いのは Figma MCP サーバー — がエージェントの第一級のコンテキストになります。"}]}, {"kind": "ul", "items": ["ベンダー: Anysphere", "認証情報: Cursor アカウント / サブスクリプション(Hobby / Pro / Business)または独自のモデルキー(BYOK)", "形態: エディタ内エージェントとプレビューを備えた AI ファーストのコードエディタ(VS Code フォーク)"]}]}, {"id": "why-design", "heading": "なぜ Cursor はデザインが得意なのか", "blocks": [{"kind": "p", "text": "Cursor のデザイン上の強みは単一の機能ではありません — 作って見るループの緊密さです。3 つの要素が、ありきたりなコードジェネレーターではなくデザインツールのように感じさせます。"}, {"kind": "steps", "items": [{"label": "緊密な反復・観察ループ", "body": "プロンプトを出すと Cursor がファイルをまたいで編集し、エディタ内プレビューが結果を即座に描画します — そのため、別のターミナルとブラウザを往復するのではなく、数秒で余白、階層、モーションを調整できます。"}, {"label": "直接的なビジュアル編集", "body": "チャットを超えて、Cursor はプレビュー内で要素を選択してスタイルを微調整させてくれるので、小さなビジュアル修正がコードの発掘ではなくデザイン編集のように感じられます。"}, {"label": "プロジェクトルールと MCP コンテキスト", "body": "`.cursor/rules`(または `AGENTS.md`)と Figma MCP サーバーを使えば、エージェントは推測ではなく、あなたの tokens、コンポーネント、実際のデザイン仕様に対して作業します。"}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "デザインシステム、skill、リファレンス画像が良いデザイン出力へと収束する様子を示す図", "caption": "センスはあなたが与える 3 つの入力から生まれます: デザインシステム、skill、本物のリファレンス画像。"}, {"kind": "p", "text": "教訓はどのエージェントが教えるのと同じです: Cursor はデフォルトではセンスを持っていません。制約 — デザインシステム、美的な skill、具体的なリファレンス — を与えたときに良いデザインを生み出します。Open Design はまさにそれらの入力をパッケージ化しており、だからこそ両者は噛み合うのです(詳細は後述)。"}]}, {"id": "setup", "heading": "デザイン作業のために Cursor をゼロからセットアップする", "blocks": [{"kind": "p", "text": "まっさらなマシンから、デザインシステムに対して UI を構築・プレビュー・検証できる Cursor までの全行程はこちらです。"}, {"kind": "ol", "items": ["cursor.com から Cursor をインストールし、Cursor アカウントでサインインするか、設定で独自のモデルキー(BYOK)を構成します。", "プロジェクトを開き、チャット / Agent パネルでモデルを選びます。", "プロジェクトルールを追加します: 構造化されたグロブスコープの規約には `.cursor/rules/*.mdc` を、シンプルで読みやすい指示にはプレーンな `AGENTS.md` を作成します。", "Figma MCP サーバーを接続して(任意)、エージェントがライブのデザインコンテキストを読めるようにします。", "dev サーバーを動かし、エディタ内プレビューを使って反復しながら UI を見て検証します。"]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "5 ステップのセットアップフロー: インストール、認証、ルール設定、skill 追加、検証", "caption": "セットアップの手順: インストール → 認証 → プロジェクトルールを設定 → skill を追加 → プレビュー検証を有効化。"}, {"kind": "p", "text": "最小限のプロジェクトルールファイルがあれば、エージェントはありきたりな見た目に落ち着くのではなくブランドに沿ってデザインします。Cursor が毎回読む場所に置きましょう:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "デザインルールを記述する", "body": "tokens、プリミティブ、規約を `.cursor/rules` または `AGENTS.md` に書き、Cursor にそれを参照させましょう。そうすれば出力がありきたりな見た目に落ち着かず、ブランドに沿ったものになります。"}, {"label": "プロンプトを小さく保つ", "body": "Cursor の緊密なループは焦点を絞った依頼に報いてくれます — 一度に 1 つのコンポーネントや状態を反復し、パスの合間にプレビューを見ましょう。"}]}]}, {"id": "preview-workflow", "heading": "プレビューから UI へのワークフロー", "blocks": [{"kind": "p", "text": "Cursor で最も効果の高いデザインのループは、リファレンスを動作するレスポンシブな UI に変え、一致するまでエディタ内で反復することです — 推測する代わりに、ずっとライブプレビューを見ながら進めます。"}, {"kind": "ol", "items": ["手元にある最も明確なビジュアルリファレンスから始めましょう — そして 1 枚のヒーローショットだけでなく、複数の状態(デスクトップとモバイル、ホバー、空、ローディング)を含めます。", "プロンプトでは具体的に。曖昧なプロンプトはありきたりな UI を生みます。", "デザインシステムを用意し、tokens と正規のプリミティブがどこにあるかを Cursor に伝えます。", "エディタ内プレビューを開いたまま dev サーバーを動かし続け、各編集が、気にするブレークポイントで即座に描画されるようにします。", "描画された UI をリファレンスと照合し直して反復し — 小さなビジュアル修正にはプレビュー内の直接要素選択を使います。"]}, {"kind": "p", "text": "チャットに画像を添付してリファレンスを与え、具体的な制約を添えてプロンプトを出します:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "良い反復はコミットし、悪い反復は元に戻す(戻したことを Cursor に伝える)ことで、各パスがクリーンなベースの上に積み上がるようにします — どのエージェントループも逸脱させないための同じ規律です。"}]}, {"id": "figma", "heading": "Cursor + Figma: MCP 経由のデザイン ↔ コード", "blocks": [{"kind": "p", "text": "Cursor は公式の Figma MCP サーバーを通じて Figma に接続し、平坦なスクリーンショットではなくライブの Figma ファイルへの構造化されたアクセスをエージェントに与えます。これがハンドオフから当て推量を取り除きます。"}, {"kind": "steps", "items": [{"label": "デザイン → コード", "body": "Figma でフレームのリンクをコピーし、それを Cursor に貼り付けて実装を依頼します。MCP サーバーは実際のデザインコンテキスト — コンポーネント、変数、レイアウトデータ、tokens — を公開するので、生成されるコードは近似ではなくソースと一致します。"}, {"label": "整合を保つ", "body": "Figma 内でデザイン tokens、スタイル、コンポーネントを一貫して使い(可能なら Code Connect も使い)、Cursor の出力はプリミティブを再発明するのではなく、あなたの実際のデザインシステムへとマッピングされ続けます。"}]}, {"kind": "p", "text": "リモートの Figma MCP サーバーを一度セットアップすれば、Cursor に第一級のコンテキストとして利用できます。MCP はオープンな標準なので、同じサーバーは Cursor、Claude Code、Codex、VS Code をまたいで再利用できます — まさに Open Design が編成するために作られた、ポータブルでマルチエージェントな機能です。"}]}, {"id": "vs", "heading": "デザインにおける Cursor vs Codex vs Claude Code", "blocks": [{"kind": "p", "text": "デザイン作業に唯一の勝者は存在しません — 各エージェントには異なる強みがあり、経験豊富なチームはそれらを重ねて使います。公平にまとめると:"}, {"kind": "table", "columns": ["エージェント", "デザインの強み", "適した用途"], "rows": [["Cursor", "エディタ内ライブプレビューと直接的な要素編集を備えた、作って見るビジュアルループ", "IDE 内での緊密な反復・観察型の UI 作業"], ["Codex", "フロントエンド skill による高いビジュアルの仕上がり、画像理解とサンドボックス実行", "委任された非同期ビルドとポータブルな AGENTS.md ルール"], ["Claude Code", "具体的なデザイン判断(hex、余白、タイプ)とコードベースを踏まえた UX", "フロントエンドの推論と大規模コンテキストのリファクタリング"]]}, {"kind": "p", "text": "コミュニティで繰り返される結論は、センスは人間から生まれるということです: 3 つとも、skills・リファレンス・制約がなければありきたりな美意識へと落ち着きます。それこそが解くべき本当の問題であり — それはモデルの形ではなく、デザインツールの形をしています。"}]}, {"id": "pitfalls", "heading": "落とし穴、そして「AI スロップ」っぽい見た目を避ける方法", "blocks": [{"kind": "p", "text": "Cursor 生成デザインへの最もよくある不満は、ありきたりに見えるというものです — 柔らかいグラデーション、浮いたパネル、過大な角丸、ドラマチックな影、「いかにも AI が作りました」と叫ぶような Inter と紫の雰囲気。ほかにも、モバイルで崩れるレイアウトや、指示が UI のコピーに漏れ出す問題が報告されています。"}, {"kind": "steps", "items": [{"label": "デザイン skill を追加する", "body": "厳選された美的な skill は、Cursor にデフォルトの見た目ではなく本物の方向性へコミットさせます。"}, {"label": "プレビューを使って検証する", "body": "エディタ内プレビューでブレークポイントをまたいで描画と自己チェックをし、レイアウトがモバイルで黙って崩れないようにします。"}, {"label": "tokens とリファレンスを供給する", "body": "本物のデザイン tokens とリファレンスのスクリーンショットは、出力品質に対する最大の単一のレバーです。"}, {"label": "ルールを `.cursor/rules` に記述する", "body": "「ヒーローカードなし、書体は最大 2 つ、ブランド優先の階層」といったスタイルルールを、エージェントが毎回読む場所に置きます。"}]}, {"kind": "p", "text": "どの対策も、エージェントに厳選されたデザインコンテキストを与えることが要だと気づくでしょう。そのコンテキストをプロジェクトごとに手作業で維持する手間こそ、Open Design が取り除くものです。"}]}, {"id": "open-design", "heading": "Open Design の中で Cursor を使ってデザインする", "blocks": [{"kind": "p", "text": "Open Design は、上記のワークフローが繰り返し求めてくるオープンソースのデザインレイヤーです。Cursor を第一級のアダプターとして扱い、厳選された skill とデザインシステムのライブラリ、構造化されたレンダーパイプライン、ローカルなデスクトップ UI でそれを包みます — そのため、Cursor を優れたものにするデザインコンテキストが、毎回手作業で組み立てるのではなく、最初の実行から揃っています。"}, {"kind": "ol", "items": ["Open Design をインストールし、エージェントとして Cursor を選びます。", "Cursor アカウントまたは独自のモデルキー(BYOK)で認証します — 認証情報はあなたのマシンに留まり、私たちを経由してプロキシされることは決してありません。", "デザインシステムと skill を選び、一貫したセンスでデッキ、プロトタイプ、ランディングページを生成します。", "あらゆる成果物と DESIGN.md ファイルは、ホスト型クラウドではなくあなた自身のリポジトリに置かれます。"]}, {"kind": "p", "text": "同じ Cursor エージェント、同じキー — それに加えて、それを取り巻く本物でポータブルなオープンソースのデザインワークフロー。ローカルファーストで Apache-2.0 なので、あなたの作業も認証情報も、マシンの外へ出ることはありません。"}]}], "faqTitle": "よくある質問", "faq": [{"name": "Cursor は本当にデザイン作業ができますか?", "text": "はい — デザイン skill、デザインシステム、本物のリファレンス画像をコンテキストに与えれば、Cursor は本番品質でレスポンシブな UI を生み出し、エディタ内プレビューでビジュアルに検証・洗練できます。そのコンテキストがなければありきたりな見た目に落ち着きがちで、それこそ Open Design が埋めるギャップです。"}, {"name": "これは公式の Cursor 製品ですか?", "text": "いいえ。Open Design は Cursor をエージェントとして統合する、独立したオープンソースプロジェクトです。Cursor を、ローカルファーストでオープンな skill とデザインシステムのライブラリで補完します。"}, {"name": "Cursor でデザインするには Cursor サブスクリプションが必要ですか?", "text": "Cursor アカウント / サブスクリプションを使うか、独自のモデルキー(BYOK)を持ち込めます。いずれの場合も Open Design があなたの認証情報をプロキシすることはありません — それらはあなたのエージェントが直接使います。"}, {"name": "フロントエンドデザインには Cursor と Claude Code のどちらがよいですか?", "text": "どちらも強力です。Claude Code は具体的でコードベースを踏まえたデザイン判断で知られ、Cursor の強みはエディタ内のライブプレビューを備えた緊密な作って見るループです。多くのチームが両方を使います — Open Design ならデザインワークフローを変えずにエージェントを切り替えられます。"}, {"name": "Cursor を Figma に接続するには?", "text": "Cursor に公式の Figma MCP サーバーを追加し、Figma フレームのリンクをチャットに貼り付けて、Cursor に実装を依頼します。サーバーは実際のコンポーネント、変数、レイアウトデータを公開するので、生成されるコードはソースのデザインと一致します。"}, {"name": "ありきたりな「AI スロップ」の美意識を避けるには?", "text": "デザイン skill を追加し、本物のデザイン tokens とリファレンスのスクリーンショットを供給し、ブランドルールを `.cursor/rules` または `AGENTS.md` に記述し、プレビューでブレークポイントをまたいで検証します。Open Design はこれらを厳選されたライブラリとして提供するので、プロジェクトごとのセットアップを省けます。"}, {"name": "Open Design は Cursor または Anysphere と提携していますか?", "text": "いいえ。Cursor は Anysphere の製品であり、Open Design はそれを第一級のアダプターとしてサポートする、独立したオープンソースプロジェクトです。Cursor と Anysphere は Anysphere, Inc. の商標です。"}, {"name": "私のファイルと認証情報は安全ですか?", "text": "はい — Open Design はローカルファーストです。あなたのファイル、成果物、DESIGN.md はあなた自身のリポジトリに留まり、Cursor またはモデルの認証情報はあなたのエージェントが直接使い、Open Design のサーバーを経由してルーティングされることは決してありません。"}], "ctaTitle": "Cursor で、オープンな方法でデザインしよう。", "ctaBody": "あなた自身の Cursor アカウントやモデルキーを持ち込み、すべてのファイルをローカルに保ち、すでに使っているエージェントを取り巻く厳選されたデザインライブラリを手に入れましょう。", "ctaActions": [{"label": "Open Design 内で Cursor を使う", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub でスターを付ける", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "デスクトップアプリをダウンロード", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "対応エージェントをすべて見る"}, + }, + 'opencode': { + ...en['opencode']!, + title: "デザインのための OpenCode — Open Design", + description: "人々が UI と Web デザインに OpenCode をどう使うか — design.md ファイル、UI/UX の skills、Figma MCP — そして Open Design が OpenCode をローカルファーストでオープンソースのデザインエージェントへと変える方法。", + breadcrumb: "OpenCode", + label: "エージェント · OpenCode", + heading: "デザインのための OpenCode。", + lead: "OpenCode はオープンソースのターミナル型 AI コーディングエージェントです。デザイナーはデザインの skills と DESIGN.md ファイルを組み合わせて本物の UI を生成します。Open Design はそれを構造化されたオープンソースのワークフローにします — あなたのプロバイダーキーを持ち込み、すべてをローカルに保ちます。", + rich: {"heroCtaLead": "Open Design は OpenCode をローカルファーストでオープンソースのデザインエージェントへと変えます — あなた自身のプロバイダーキーで選んだ任意のモデル、あなたのファイル、そしてそれを取り巻く厳選された skill とデザインシステムのライブラリ。", "heroCtaActions": [{"label": "Open Design 内で OpenCode を使う", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub でスターを付ける", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "デスクトップアプリをダウンロード", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode はオープンソースでターミナルファーストの AI コーディングエージェントであり、意図的にモデル非依存です: あなた自身のプロバイダーキーを持ち込み、同じワークフローの背後で好きなモデルを動かせます。その開放性が、デザイン作業にとって自然な土台になります — しかしどのエージェントとも同じで、適切なリファレンス、skills、検証ループを与えたときにのみ良い UI を生み出します。本稿は、UI・フロントエンド・デザインシステムの作業に OpenCode を使い、それを Open Design で構造化されたデザインワークフローへ組み込むための、実践的でエンドツーエンドのガイドです。", "OpenCode が実際に何であるか、なぜモデル非依存のオープンなエージェントがデザインに向いているのか、ゼロからのセットアップ方法、スクリーンショットから UI へのループ、AGENTS.md と MCP がどう拡張するか、Codex・Claude Code・Cursor との比較、AI の出力をありきたりに見せてしまう落とし穴、そして Open Design がオープンでローカルファーストなデザインレイヤーとしてそのギャップをどう埋めるか — 両プロジェクトともオープンソースであなた自身のマシン上で動くので、自然な組み合わせです — を扱います。"], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "OpenCode のデザインフィードバックループ: ターミナル TUI エージェント、UI を描画するブラウザ、ワークスペース、そして戻ってくるフィードバックの矢印", "caption": "中核となるループ: OpenCode がターミナルで UI を構築し、実際のブラウザで描画・検証し、あなたのリファレンスへ向けて反復します — 選んだどのモデルでも。"}, "tocLabel": "このページの内容", "toc": [{"id": "what-is-opencode", "label": "OpenCode とは実際に何か"}, {"id": "why-design", "label": "なぜオープンで任意モデルのエージェントがデザインに合うのか"}, {"id": "setup", "label": "デザイン向けに OpenCode をセットアップする(ゼロから)"}, {"id": "screenshot-workflow", "label": "スクリーンショットから UI へのワークフロー"}, {"id": "extend", "label": "AGENTS.md、MCP、共有可能なセッション"}, {"id": "vs", "label": "OpenCode vs Codex vs Claude Code vs Cursor"}, {"id": "pitfalls", "label": "落とし穴と「AI スロップ」っぽい見た目"}, {"id": "open-design", "label": "Open Design で OpenCode を使ってデザインする"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-opencode", "heading": "OpenCode とは実際に何か", "blocks": [{"kind": "p", "text": "OpenCode は、SST(Anomaly Innovations)のチームが保守する、ターミナル向けに作られたオープンソースの AI コーディングエージェントです。リポジトリを読み、コマンドを実行し、ファイルを編集し、大規模言語モデルと対話します — しかしベンダーに縛られたエージェントと違い、自前のモデルは出荷しません。好きなプロバイダーとモデルを指定し、あなた自身のキーを持ち込みます。"}, {"kind": "p", "text": "ターミナル UI(TUI)として動作し、同じエンジンの上にデスクトップアプリと IDE 拡張機能が乗っています。内部ではクライアント/サーバーアーキテクチャを使っているため、作業を行うエージェントは、あなたがそれを操作する面から切り離されています。組み込みの 2 つのエージェント — build と plan — は Tab キーで切り替わります。"}, {"kind": "steps", "items": [{"label": "モデル非依存", "body": "モデルとプロバイダーはオープンなカタログ models.dev から来ます。opencode.json で provider/model-id の文字列により構成し、読み込みたくないプロバイダーは無効化できます — そのため同じデザインワークフローが Anthropic、OpenAI、Google、OpenRouter、ローカルモデルなどで動きます。"}, {"label": "指示ファイル", "body": "OpenCode はプロジェクト内の AGENTS.md ファイル(ツール横断の標準で、CLAUDE.md とも互換)をプロジェクトルールとして読み込みます — デザインの規約を記述する自然な場所です。/init を実行すると 1 つ生成されます。"}, {"label": "拡張可能", "body": "LSP 連携、MCP サーバー、テーマ、キーバインド、カスタムコマンドに加え、コラボレーションのための共有可能なセッションリンクもサポートします。"}]}, {"kind": "ul", "items": ["メンテナー: SST / Anomaly Innovations(オープンソースプロジェクト)", "認証情報: あなた自身のモデルプロバイダー API キー — BYOK、ベンダーロックインなし", "ライセンス: MIT、オープンソース"]}]}, {"id": "why-design", "heading": "なぜオープンで任意モデルのエージェントがデザイン作業に合うのか", "blocks": [{"kind": "p", "text": "OpenCode は、ベンダーエージェントのような単一の「デザインモデル」を持っていません — そしてそれが要点です。モデル非依存でオープンなので、いま最もフロントエンドに優れたモデルで同じデザインワークフローを動かし、あとで入れ替え、あるいはローカルモデルへフォールバックすることが、セットアップを一切変えずにできます。"}, {"kind": "p", "text": "しかしモデルの選択だけではセンスは手に入りません。どのコーディングエージェントとも同じで、制約を与えない限り OpenCode はありきたりな UI を生み出します。良いデザイン出力は、あなたが与える 3 つの入力から生まれます。"}, {"kind": "steps", "items": [{"label": "デザインシステム", "body": "エージェントが再利用する本物の tokens、プリミティブ、規約。これにより出力がありきたりな見た目に落ち着かず、ブランドに沿ったものになります。"}, {"label": "美的な skill", "body": "本物のセンスを徹底する厳選された skill — 抑制されたモーション、ブランド優先の階層、最大 2 つの書体と 1 つのアクセントカラー — そして構築前にエージェントに方向性をコミットさせます。"}, {"label": "具体的なリファレンス", "body": "実際のリファレンス画像と複数の状態(デスクトップとモバイル、ホバー、空、ローディング)であり、1 枚のヒーローショットではありません。"}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "デザインシステム、skill、リファレンス画像が良いデザイン出力へと収束する様子を示す図", "caption": "センスはあなたが与える 3 つの入力から生まれます: デザインシステム、skill、本物のリファレンス画像 — どのモデルを動かすかに関係なく。"}, {"kind": "p", "text": "教訓: OpenCode はモデルの自由を与えてくれますが、センスは依然として厳選されたデザインコンテキストから生まれます。Open Design はまさにそれらの入力をパッケージ化しており、だからこそ両者は噛み合うのです — どちらもオープンソースでローカルファーストです(詳細は後述)。"}]}, {"id": "setup", "heading": "デザイン作業のために OpenCode をゼロからセットアップする", "blocks": [{"kind": "p", "text": "まっさらなマシンから、UI を構築・検証できる OpenCode までの全行程はこちらです。"}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "5 ステップのセットアップフロー: インストール、プロバイダーキーで認証、AGENTS.md 設定、skill 追加、検証", "caption": "セットアップの手順: インストール → 認証(あなたのプロバイダーキー)→ AGENTS.md を設定 → skill を追加 → 実際のブラウザで検証。"}, {"kind": "steps", "items": [{"label": "デザインルールを記述する", "body": "tokens、プリミティブ、規約を AGENTS.md(またはそこから参照される DESIGN.md)に書き、出力がありきたりな見た目に落ち着かず、ブランドに沿ったものになるようにします。opencode.json の instructions オプションは、グロブによって追加のルールファイルを指せます。"}, {"label": "有能なモデルを選ぶ", "body": "OpenCode はモデル非依存なので、デザインパスにはいま最もフロントエンドに強い provider/model を選び — ワークフローの残りはそのままに保ちます。"}]}]}, {"id": "screenshot-workflow", "heading": "スクリーンショットから UI へのワークフロー", "blocks": [{"kind": "p", "text": "どのエージェントでも最も効果の高いデザインのループは、リファレンス画像を動作するレスポンシブな UI に変え、一致するまで反復することです。OpenCode でも同じ 5 ステップの形が当てはまります。"}, {"kind": "ol", "items": ["手元にある最も明確なビジュアルリファレンスから始めましょう — そして 1 枚のヒーローショットだけでなく、複数の状態(デスクトップとモバイル、ホバー、空、ローディング)を含めます。", "プロンプトでは具体的に。曖昧なプロンプトはありきたりな UI を生みます。", "デザインシステムを用意し、tokens と正規のプリミティブがどこにあるか(AGENTS.md 内)を OpenCode に伝えます。", "dev サーバーを動かし、エージェントに実際のブラウザで描画させ、結果を確認するためにブレークポイントへリサイズさせます。", "OpenCode に実装をスクリーンショットと照合し直させて反復します — 単にビルドが通ることを確認するだけにしないようにします。"]}, {"kind": "p", "text": "TUI で @ を使ってファイルを参照すると作業ディレクトリのあいまい検索ができ、先頭に ! を付けてシェルコマンドをインラインで実行し、/ コマンドでアクションを駆動します。そのうえで具体的な制約を添えてプロンプトを出します:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "プロンプトを小さく焦点を絞って保ち、良い反復はコミットし、悪い反復は元に戻す(戻したことを OpenCode に伝える)ことで、各パスがクリーンなベースの上に積み上がるようにします。"}]}, {"id": "extend", "heading": "AGENTS.md、MCP、共有可能なセッション", "blocks": [{"kind": "p", "text": "3 つの拡張ポイントが OpenCode を継続的なデザイン作業に実用的なものにし、その 3 つともオープンなデザインワークフローへきれいに対応します。"}, {"kind": "steps", "items": [{"label": "AGENTS.md ルール", "body": "プロジェクトルールはリポジトリルートの AGENTS.md(またはグローバルルールとして ~/.config/opencode/AGENTS.md)に置きます。それはデザインの規約の恒久的な置き場であり、毎回の実行で読み込まれ、他のエージェントが使う CLAUDE.md ファイルとも互換です。"}, {"label": "MCP サーバー", "body": "OpenCode はローカル(コマンド)とリモート(URL)の両方の MCP サーバーをサポートし、mcp キーの下で構成します — OpenCode だけでなくエージェント横断で機能する、デザインコンテキストや外部ツールを取り込むためのポータブルな方法です。"}, {"label": "共有可能なセッション", "body": "/share コマンドはコラボレーションやレビューのために会話への公開リンクを作り、/unshare がそれを取り消します — デザインパスへのフィードバックを得るのに便利です。"}]}, {"kind": "p", "text": "これらはポータブルでマルチエージェントな機能です — まさに Open Design が、プロジェクトごとに再作成するのではなく、編成するために作られたものです。"}]}, {"id": "vs", "heading": "デザインにおける OpenCode vs Codex vs Claude Code vs Cursor", "blocks": [{"kind": "p", "text": "デザイン作業に唯一の勝者は存在しません — 各エージェントには異なる強みがあり、経験豊富なチームはそれらを重ねて使います。公平にまとめると:"}, {"kind": "table", "columns": ["エージェント", "デザインの強み", "適した用途"], "rows": [["OpenCode", "オープンソースでモデル非依存。1 つのターミナルワークフローの背後で任意のプロバイダーを動かせる", "BYOK の自由、モデル切り替え、完全にオープンでローカルファーストな構成"], ["Codex", "フロントエンド skill による高いビジュアルの仕上がり、画像理解", "委任された非同期、サンドボックス化ビルド、ポータブルな AGENTS.md ルール"], ["Claude Code", "具体的なデザイン判断(hex、余白、タイプ)とコードベースを踏まえた UX", "フロントエンドの推論と大規模コンテキストのリファクタリング"], ["Cursor", "ライブプレビューとインライン編集を備えた、作って見るビジュアルループ", "IDE 内での緊密な反復・観察型の UI 作業"]]}, {"kind": "p", "text": "コミュニティで繰り返される結論は、センスは人間から生まれるということです: どれもが、skills・リファレンス・制約がなければありきたりな美意識へと落ち着きます。それこそが解くべき本当の問題であり — それはモデルの形ではなくデザインツールの形をしています。だからこそ OpenCode のようなオープンなエージェントは、オープンなデザインレイヤーと非常に相性が良いのです。"}]}, {"id": "pitfalls", "heading": "落とし穴、そして「AI スロップ」っぽい見た目を避ける方法", "blocks": [{"kind": "p", "text": "AI 生成デザインへの最もよくある不満は、ありきたりに見えるというものです — 柔らかいグラデーション、浮いたパネル、過大な角丸、ドラマチックな影、「いかにも AI が作りました」と叫ぶような Inter と紫の雰囲気。ほかにも、モバイルレイアウトの崩れや、指示が UI のコピーに漏れ出す問題が報告されています。これらはどれも OpenCode に固有のものではありません。どのエージェントでも、厳選されたデザインコンテキストなしに動かしたときに起こることです。"}, {"kind": "steps", "items": [{"label": "美的な skill を追加する", "body": "厳選されたデザイン skill は、エージェントにデフォルトの見た目ではなく本物の方向性へコミットさせます。"}, {"label": "実際のブラウザで検証する", "body": "ブレークポイントをまたいで描画と自己チェックをし、レイアウトがモバイルで黙って崩れないようにします。"}, {"label": "tokens とリファレンスを供給する", "body": "本物のデザイン tokens とリファレンスのスクリーンショットは、出力品質に対する最大の単一のレバーです。"}, {"label": "ルールを AGENTS.md に記述する", "body": "「ヒーローカードなし、書体は最大 2 つ、ブランド優先の階層」といったスタイルルールを、エージェントが毎回読む場所に置きます。"}]}, {"kind": "p", "text": "どの対策も、どのモデルを動かすかに関係なく、エージェントに厳選されたデザインコンテキストを与えることが要だと気づくでしょう。そのコンテキストをプロジェクトごとに手作業で維持する手間こそ、Open Design が取り除くものです。"}]}, {"id": "open-design", "heading": "Open Design の中で OpenCode を使ってデザインする", "blocks": [{"kind": "p", "text": "Open Design は、上記のワークフローが繰り返し求めてくるオープンソースのデザインレイヤーです。OpenCode を第一級のアダプターとして扱い、厳選された skill とデザインシステムのライブラリ、構造化されたレンダーパイプライン、ローカルなデスクトップ UI でそれを包みます — そのため、どのエージェントも優れたものにするデザインコンテキストが、毎回手作業で組み立てるのではなく、最初の実行から揃っています。両プロジェクトともオープンソースでローカルファーストなので、組み合わせは自然にフィットします。"}, {"kind": "ol", "items": ["Open Design をインストールし、エージェントとして OpenCode を選びます。", "あなた自身のモデルプロバイダー API キー(BYOK)で認証します — 認証情報はあなたのマシンに留まり、私たちを経由してプロキシされることは決してありません。", "任意のプロバイダーとモデルを選び、さらにデザインシステムと skill を選んで、一貫したセンスでデッキ、プロトタイプ、ランディングページを生成します。", "あらゆる成果物と DESIGN.md ファイルは、ホスト型クラウドではなくあなた自身のリポジトリに置かれます。"]}, {"kind": "p", "text": "同じ OpenCode エージェント、同じモデルの自由 — それに加えて、それを取り巻く本物でポータブルなオープンソースのデザインワークフロー。ローカルファーストで Apache-2.0 なので、あなたの作業も認証情報も、マシンの外へ出ることはありません。"}]}], "faqTitle": "よくある質問", "faq": [{"name": "OpenCode は本当にデザイン作業ができますか?", "text": "はい — 美的な skill、デザインシステム、本物のリファレンス画像をコンテキストに与えれば、OpenCode は本番品質でレスポンシブな UI を生み出し、ブラウザで検証できます。モデル非依存なので、いま最もフロントエンドに優れたモデルを動かせます。その厳選されたコンテキストがなければありきたりな見た目に落ち着きがちで、それこそ Open Design が埋めるギャップです。"}, {"name": "OpenCode でデザインするにはどのモデルを使うべきですか?", "text": "好きなものを — OpenCode は models.dev 経由でプロバイダー非依存なので、Anthropic、OpenAI、Google、OpenRouter、ローカルモデルを同じワークフローの背後で動かし、いつでも切り替えられます。デザイン出力の品質は、モデル単独よりも、あなたの skill、デザインシステム、リファレンスにはるかに左右されます。"}, {"name": "Open Design は OpenCode(SST)チームが作っていますか?", "text": "いいえ。Open Design は OpenCode をエージェントとして統合する、独立したオープンソースプロジェクトです。OpenCode を、ローカルファーストでオープンな skill とデザインシステムのライブラリで補完します。"}, {"name": "OpenCode でデザインするには特別なサブスクリプションが必要ですか?", "text": "いいえ — OpenCode は BYOK です。あなた自身のモデルプロバイダー API キーを持ち込み、Open Design があなたの認証情報をプロキシすることはありません。ベンダーロックインはありません。"}, {"name": "フロントエンドデザインには OpenCode、Codex、Claude Code のどれがよいですか?", "text": "どれも強力で、多くのチームがそれらを重ねて使います。OpenCode の強みは完全にオープンソースでモデル非依存であること、Codex は委任されたサンドボックス化ビルドに優れ、Claude Code は具体的でコードベースを踏まえたデザイン判断で知られます。Open Design ならデザインワークフローを変えずにエージェントを切り替えられます。"}, {"name": "デザインコンテキストのために OpenCode をどう拡張しますか?", "text": "ルールを AGENTS.md に記述し、ポータブルなツールやデザインコンテキストのために mcp キーの下に MCP サーバーを追加し、レビューには共有可能なセッションを使います。Open Design は厳選された skill とデザインシステムのライブラリを提供するので、プロジェクトごとのセットアップを省けます。"}, {"name": "Open Design は OpenCode または SST と提携していますか?", "text": "いいえ。OpenCode は SST(Anomaly Innovations)が保守するオープンソースプロジェクトであり、Open Design はそれを第一級のアダプターとしてサポートする、独立したオープンソースプロジェクトです。"}, {"name": "私のファイルと認証情報は安全ですか?", "text": "はい — Open Design はローカルファーストです。あなたのファイル、成果物、DESIGN.md はあなた自身のリポジトリに留まり、モデルプロバイダーの認証情報はあなたのエージェントが直接使い、Open Design のサーバーを経由してルーティングされることは決してありません。"}], "ctaTitle": "OpenCode で、オープンな方法でデザインしよう。", "ctaBody": "あなた自身のモデルプロバイダーキーを持ち込み、すべてのファイルをローカルに保ち、すでに使っているオープンなエージェントを取り巻く厳選されたデザインライブラリを手に入れましょう。", "ctaActions": [{"label": "Open Design 内で OpenCode を使う", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub でスターを付ける", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "デスクトップアプリをダウンロード", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "対応エージェントをすべて見る"}, + }, + }, + 'ko': { + 'claude-code': { + ...en['claude-code']!, + title: "디자인을 위한 Claude Code — Open Design", + description: "디자이너가 UI와 웹 디자인에 Claude Code를 활용하는 방법, 그리고 Open Design이 이를 실제 디자인 에이전트로 바꾸는 방식 — 로컬 우선, BYOK, 엄선된 skill 및 디자인 시스템 라이브러리와 함께.", + breadcrumb: "Claude Code", + label: "에이전트 · Claude Code", + heading: "디자인을 위한 Claude Code.", + lead: "Claude Code는 Anthropic의 터미널 코딩 에이전트입니다. 사람들은 이미 이를 활용해 UI, 디자인 시스템, 랜딩 페이지를 만들고 있습니다. Open Design은 이를 실제 디자인 워크플로에 연결합니다 — 자신의 Anthropic 키 또는 Claude 구독을 가져오고, 모든 파일을 로컬에 유지하세요.", + rich: {"heroCtaLead": "Open Design은 Claude Code를 로컬 우선의 오픈소스 디자인 에이전트로 바꿉니다 — 자신의 Anthropic 키 또는 Claude 구독, 자신의 파일, 그리고 그 주위를 감싸는 엄선된 skill 및 디자인 시스템 라이브러리.", "heroCtaActions": [{"label": "Open Design 안에서 Claude Code 사용하기", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub에서 Star 누르기", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "데스크톱 앱 다운로드", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code는 프런트엔드 감각이 가장 뛰어난 코딩 에이전트로 널리 인정받습니다 — 인터페이스를 유난히 구체적으로 추론하며 정확한 hex 값, 간격, 타입 스케일을 명시하고, 큰 코드베이스 전반에 걸쳐 맥락을 잃지 않으면서 UI를 리팩터링합니다. 하지만 기본 상태에서는 디자인 시스템, skill, 실제 레퍼런스를 건네지 않으면 여전히 평범한 모습으로 흘러갑니다. 이 글은 UI, 프런트엔드, 디자인 시스템 작업에 Claude Code를 활용하고, 이를 Open Design과 함께 구조화된 워크플로에 연결하는 실용적이고 처음부터 끝까지 이어지는 가이드입니다.", "Claude Code가 실제로 무엇인지, 왜 프런트엔드에 강한지, 처음부터 설정하는 방법, CLAUDE.md와 Skills 워크플로, 공식 Figma 왕복 연동, Codex 및 Cursor와의 비교, AI 결과물을 평범해 보이게 만드는 함정, 그리고 Open Design이 개방적이고 로컬 우선인 디자인 레이어로서 이 격차를 메우는 방식을 다룹니다."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Claude Code 디자인 피드백 루프: 구체적인 디자인 결정을 내리는 터미널 에이전트, UI를 렌더링하는 브라우저, 그리고 작업 공간, 다시 돌아오는 피드백 화살표와 함께", "caption": "핵심 루프: Claude Code는 터미널에서 구체적인 UI 결정을 추론하고, 실제 브라우저에서 렌더링하고 검증하며, 레퍼런스에 수렴합니다."}, "tocLabel": "이 페이지에서", "toc": [{"id": "what-is-claude-code", "label": "Claude Code는 실제로 무엇인가"}, {"id": "why-design", "label": "Claude Code가 디자인에 강한 이유"}, {"id": "setup", "label": "디자인을 위한 Claude Code 설정하기 (처음부터)"}, {"id": "skills-workflow", "label": "CLAUDE.md와 Skills 워크플로"}, {"id": "figma", "label": "Claude Code + Figma 왕복 연동"}, {"id": "vs", "label": "Claude Code vs Codex vs Cursor"}, {"id": "pitfalls", "label": "함정과 “AI 티” 나는 결과물"}, {"id": "open-design", "label": "Open Design에서 Claude Code로 디자인하기"}, {"id": "faq", "label": "자주 묻는 질문"}], "sections": [{"id": "what-is-claude-code", "heading": "Claude Code는 실제로 무엇인가", "blocks": [{"kind": "p", "text": "Claude Code는 Anthropic의 에이전트형 코딩 도구입니다. 코드베이스를 읽고, 파일을 편집하고, 명령을 실행하며, 개발 도구와 통합됩니다 — 단순히 줄을 자동 완성하는 것이 아니라 자연어 작업으로부터 작업을 계획하고, 작성하고, 검증합니다."}, {"kind": "p", "text": "동일한 엔진을 공유하는 여러 표면으로 제공됩니다: 터미널 CLI, VS Code·Cursor·JetBrains용 IDE 확장, 시각적 diff 리뷰를 갖춘 데스크톱 앱, 그리고 장시간 작업을 위한 웹 환경. CLAUDE.md 파일, 설정, MCP 서버는 이 모든 표면에 걸쳐 이어집니다."}, {"kind": "steps", "items": [{"label": "지시 파일", "body": "Claude Code는 모든 세션 시작 시 프로젝트 루트의 CLAUDE.md 파일을 읽습니다 — 디자인 컨벤션, tokens, 리뷰 체크리스트를 담기에 가장 자연스러운 곳입니다."}, {"label": "Skills", "body": "Agent Skills는 반복 가능한 지시, 스크립트, 리소스를 패키징하여 Claude가 필요할 때 불러옵니다. Anthropic의 공식 Frontend Design skill을 포함해 감각을 더합니다."}, {"label": "계획과 서브에이전트", "body": "행동에 앞서 계획을 세우고, 작업의 여러 부분을 병렬로 처리하는 서브에이전트를 띄울 수 있어 대규모 UI 리팩터링도 일관되게 유지합니다."}]}, {"kind": "ul", "items": ["공급사: Anthropic", "자격 증명: Anthropic API 키(BYOK, Console 경유) 또는 Claude 구독(Pro / Max)", "표면: 터미널 CLI, VS Code / Cursor / JetBrains 확장, 데스크톱 앱, 웹"]}]}, {"id": "why-design", "heading": "Claude Code가 디자인에 강한 이유", "blocks": [{"kind": "p", "text": "코딩 에이전트들 가운데 Claude Code는 프런트엔드 작업에서 감각이 좋다는 평판을 가지고 있습니다. 그 이유는 몇 가지로 설명됩니다."}, {"kind": "steps", "items": [{"label": "모호하지 않은, 구체적인 결정", "body": "Claude Code는 두루뭉술하게 넘기지 않고 구체적인 선택 — 정확한 hex 값, 간격 스케일, 타입 램프, 컴포넌트 위계 — 에 명확히 전념하는 경향이 있습니다. 이것이 실제 인터페이스와 자리채움을 가르는 차이입니다."}, {"label": "코드베이스를 이해하는 추론", "body": "큰 작업 컨텍스트를 바탕으로 여러 파일에 걸친 UI를 한 번에 리팩터링하며, 일회성 스타일을 새로 만들기보다 기존 컴포넌트와 tokens를 재사용합니다."}, {"label": "공식 프런트엔드 skill", "body": "Anthropic은 Claude가 먼저 디자인 방향을 쓰게 하고, 평범한 시스템 폰트와 뻔한 보라색 그라데이션을 의도적으로 피하도록 만드는 Frontend Design skill을 제공합니다."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "디자인 시스템, skill, 레퍼런스 이미지가 좋은 디자인 결과물로 수렴하는 것을 보여주는 다이어그램", "caption": "감각은 여러분이 제공하는 세 가지 입력에서 나옵니다: 디자인 시스템, skill, 그리고 실제 레퍼런스 이미지."}, {"kind": "p", "text": "교훈은 Anthropic이 자사 모델에 대해 말하는 것과 같습니다: Claude는 기본적으로 감각을 가지고 있지 않습니다 — 내버려 두면 웹 디자인의 통계적 중심(Inter, 보라색 그라데이션, 부드러운 그림자)으로 수렴합니다. 제약을 주면 좋은 디자인을 만들어 냅니다. Open Design은 바로 그 입력들을 패키징하며, 그래서 둘이 잘 맞물립니다(아래에서 자세히)."}]}, {"id": "setup", "heading": "디자인 작업을 위한 Claude Code 설정하기, 처음부터", "blocks": [{"kind": "p", "text": "깨끗한 머신에서 UI를 만들고 검증할 수 있는 Claude Code까지 가는 전체 경로는 다음과 같습니다."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "다섯 단계 설정 흐름: 설치, 인증, CLAUDE.md 구성, skill 추가, 검증", "caption": "설정 순서: 설치 → 인증 → CLAUDE.md 구성 → Frontend Design skill 추가 → 브라우저 검증 활성화."}, {"kind": "steps", "items": [{"label": "디자인 규칙을 담기", "body": "tokens, 기본 요소, 컨벤션을 CLAUDE.md에 담고 Claude가 그것을 보도록 가리키세요. 그러면 결과물이 평범한 모습으로 기본 회귀하지 않고 브랜드에 맞춰집니다."}, {"label": "브라우저 검증 추가하기", "body": "Playwright 또는 Chrome MCP를 연결해 Claude가 실제 브라우저에서 렌더링하고, 빌드 통과만 확인하는 대신 여러 브레이크포인트에 걸쳐 결과물을 점검하도록 하세요."}]}]}, {"id": "skills-workflow", "heading": "CLAUDE.md와 Skills 워크플로", "blocks": [{"kind": "p", "text": "Claude Code로 얻는 가장 효과적인 디자인 루프는 실제 레퍼런스와 디자인 컨텍스트를 함께 제공하고 UI가 맞아떨어질 때까지 반복하는 것입니다 — CLAUDE.md와 Skills가 제약을 담아 두기에 매번 다시 설명할 필요가 없습니다."}, {"kind": "ol", "items": ["가지고 있는 가장 명확한 시각 레퍼런스에서 시작하세요 — 그리고 히어로 한 컷이 아니라 여러 상태(데스크톱과 모바일, hover, 빈 상태, 로딩)를 포함하세요.", "프롬프트에서 구체적으로 쓰세요. 강력한 에이전트라도 모호한 프롬프트는 평범한 UI를 낳습니다.", "디자인 시스템과 컨벤션을 CLAUDE.md에 두고, tokens와 정식 기본 요소가 어디에 있는지 Claude에게 알려 주세요.", "Claude가 코드를 작성하기 전에 실제 미학적 방향에 전념하도록 Frontend Design skill을 추가하세요.", "Claude가 단지 빌드가 되는지만 확인하는 게 아니라, 렌더링하고 브레이크포인트로 크기를 바꿔 레퍼런스와 다시 비교하도록 브라우저 검증을 연결하세요."]}, {"kind": "p", "text": "세션에 레퍼런스 이미지를 넣고 구체적인 제약과 함께 프롬프트하세요:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "옆에서 dev 서버를 띄우고, 프롬프트는 작고 집중되게 유지하며, 좋은 반복은 커밋하고 나쁜 반복은 되돌리세요(되돌릴 때 Claude에게 알려 주세요). 그래야 각 패스가 깨끗한 기반 위에서 쌓입니다. 더 큰 리팩터링에는 plan 모드를 사용해 파일이 변경되기 전에 접근 방식을 검토하세요."}]}, {"id": "figma", "heading": "Claude Code + Figma: 디자인 ↔ 코드 왕복 연동", "blocks": [{"kind": "p", "text": "2026년 2월, Anthropic과 Figma는 Figma MCP 서버를 통해 일급의 양방향 통합을 선보였습니다. 양쪽 방향 모두에서 작동합니다."}, {"kind": "steps", "items": [{"label": "디자인 → 코드", "body": "Figma에서 프레임을 선택하거나 링크를 Claude Code에 붙여넣고, 디자인 컨텍스트를 가져온 다음, 기존 컴포넌트 라이브러리를 사용해 디자인을 구현하도록 요청하세요. Code Connect는 결과물을 실제 컴포넌트에 맞춰 유지합니다."}, {"label": "코드 → 디자인", "body": "브라우저에서 기능을 만들고 미리 본 뒤 “Send this to Figma”라고 말하면 실행 중인 UI를 편집 가능한 Figma 레이어로 — 화면 전체 또는 선택한 요소로 — 캡처합니다."}]}, {"kind": "p", "text": "claude plugin install figma@claude-plugins-official로 한 번만 설치하면 됩니다(Dev Mode MCP는 유료 Figma 플랜이 필요합니다). 동일한 Figma MCP는 Claude Code, Codex, Cursor, VS Code에서 사용할 수 있습니다 — 바로 Open Design이 오케스트레이션하도록 설계된 이식 가능한 멀티 에이전트 역량의 전형입니다."}]}, {"id": "vs", "heading": "디자인을 위한 Claude Code vs Codex vs Cursor", "blocks": [{"kind": "p", "text": "디자인 작업에 단 하나의 승자는 없습니다 — 에이전트마다 강점이 다르고, 숙련된 팀은 이들을 함께 쌓아 씁니다. 공정한 요약은 다음과 같습니다:"}, {"kind": "table", "columns": ["에이전트", "디자인 강점", "가장 적합한 경우"], "rows": [["Claude Code", "구체적인 디자인 결정(hex, 간격, 타입)과 코드베이스를 이해하는 UX 추론", "프런트엔드 추론과 대형 컨텍스트 리팩터링"], ["Codex", "강한 비주얼 완성도와 이미지 이해; 샌드박스 비동기 빌드", "위임된 비동기 빌드와 이식 가능한 AGENTS.md 규칙"], ["Cursor", "라이브 미리보기와 인라인 편집을 갖춘 시각적 만들고-보기 루프", "IDE 안에서의 긴밀한 반복하며-지켜보는 UI 작업"]]}, {"kind": "p", "text": "커뮤니티에서 반복되는 결론은 감각이 사람에게서 나온다는 것입니다: 셋 모두 skill, 레퍼런스, 제약이 없으면 평범한 미학으로 기본 회귀합니다. 그것이 풀어야 할 진짜 문제이며 — 모델 모양이 아니라 디자인 도구 모양의 문제입니다."}]}, {"id": "pitfalls", "heading": "함정, 그리고 “AI 티” 나는 결과물을 피하는 법", "blocks": [{"kind": "p", "text": "Claude Code가 감각으로 평판이 좋더라도, AI가 생성한 디자인에 대한 가장 흔한 불만은 평범해 보인다는 것입니다 — Inter 폰트, 흰 배경 위 보라색 그라데이션, 부드러운 그림자, 과도하게 둥근 모서리, “AI가 만들었다고 외치는” 듯한 미학. Anthropic 스스로도 이를 분포적 수렴 탓으로 봅니다: 안전한 선택이 웹 학습 데이터를 지배하기 때문입니다. 그 밖에 보고된 문제로는 깨진 모바일 레이아웃과 지시문이 UI 카피에 새어 나오는 것이 있습니다."}, {"kind": "steps", "items": [{"label": "Frontend Design skill 설치하기", "body": "Claude가 실제 방향에 전념하도록 강제하고, AI가 과용하는 폰트와 그라데이션을 명시적으로 피합니다."}, {"label": "브라우저 검증 활성화하기", "body": "Claude가 브레이크포인트 전반에서 렌더링하고 스스로 점검하게 하여 레이아웃이 모바일에서 조용히 깨지지 않도록 하세요."}, {"label": "tokens와 레퍼런스 제공하기", "body": "실제 디자인 tokens와 레퍼런스 스크린샷은 결과물 품질을 좌우하는 가장 큰 단일 지렛대입니다."}, {"label": "CLAUDE.md에 규칙 담기", "body": "“히어로 카드 금지, 서체 최대 두 종, 브랜드 우선 위계” 같은 스타일 규칙을 에이전트가 매번 읽는 곳에 두세요."}]}, {"kind": "p", "text": "모든 완화책이 에이전트에게 엄선된 디자인 컨텍스트를 주는 것임에 주목하세요. 그 컨텍스트를 프로젝트마다 손으로 유지하는 수고가 바로 Open Design이 없애는 것입니다."}]}, {"id": "open-design", "heading": "Open Design 안에서 Claude Code로 디자인하기", "blocks": [{"kind": "p", "text": "Open Design은 위 워크플로가 계속 요구하던 그 오픈소스 디자인 레이어입니다. Claude Code를 일급 어댑터로 취급하고 엄선된 skill 및 디자인 시스템 라이브러리, 구조화된 렌더 파이프라인, 로컬 데스크톱 UI로 감싸 줍니다 — 그래서 Claude Code를 좋게 만드는 디자인 컨텍스트가 매번 손으로 조립하는 대신 첫 실행부터 갖춰져 있습니다."}, {"kind": "ol", "items": ["Open Design을 설치하고 에이전트로 Claude Code를 선택하세요.", "Anthropic API 키(BYOK) 또는 Claude 구독으로 인증하세요 — 자격 증명은 여러분의 머신에 머물며 결코 저희를 거쳐 프록시되지 않습니다.", "디자인 시스템과 skill을 고른 다음, 일관된 감각으로 덱, 프로토타입, 랜딩 페이지를 생성하세요.", "모든 산출물과 DESIGN.md 파일은 호스팅 클라우드가 아니라 여러분 자신의 레포에 존재합니다."]}, {"kind": "p", "text": "같은 Claude Code 에이전트, 같은 키 — 그 위에 실제로 이식 가능한 오픈소스 디자인 워크플로가 더해집니다. 로컬 우선이며 Apache-2.0이라, 여러분의 작업이나 자격 증명 중 어떤 것도 머신을 떠나지 않습니다."}]}], "faqTitle": "자주 묻는 질문", "faq": [{"name": "Claude Code는 디자인 작업에 좋은가요?", "text": "네 — 프런트엔드 감각이 가장 뛰어난 코딩 에이전트로 널리 인정받으며, hex 값, 간격, 타입 스케일에 대해 구체적이고 코드베이스를 이해하는 결정을 내립니다. Frontend Design skill, 디자인 시스템, 그리고 실제 레퍼런스 이미지가 컨텍스트에 있으면 양산 품질의 반응형 UI를 만들고 브라우저에서 검증할 수 있습니다. 그런 컨텍스트가 없으면 평범한 모습으로 기본 회귀하는 경향이 있는데, 그것이 바로 Open Design이 메우는 격차입니다."}, {"name": "Claude Code로 디자인하려면 Claude 구독이 필요한가요?", "text": "Anthropic API 키(BYOK, Console 경유) 또는 Claude 구독(Pro / Max) 중 어느 쪽이든 사용할 수 있습니다. 어느 경우든 Open Design은 결코 여러분의 자격 증명을 프록시하지 않습니다 — 자격 증명은 여러분의 머신에서 에이전트가 직접 사용합니다."}, {"name": "프런트엔드 디자인에는 Claude Code인가요, Codex인가요?", "text": "둘 다 강력합니다. Claude Code는 구체적이고 코드베이스를 이해하는 디자인 결정과 프런트엔드 추론으로 알려져 있고, Codex는 강한 비주얼 완성도와 위임된 샌드박스 빌드에 능합니다. 많은 팀이 둘 다 씁니다 — Open Design을 쓰면 디자인 워크플로를 바꾸지 않고 에이전트를 전환할 수 있습니다."}, {"name": "Claude Code를 Figma에 어떻게 연결하나요?", "text": "claude plugin install figma@claude-plugins-official로 공식 Figma 플러그인을 설치하세요. 그러면 디자인 컨텍스트를 사용해 Figma 프레임을 코드로 구현할 수 있고, “Send this to Figma”로 실행 중인 UI를 편집 가능한 Figma 프레임으로 되돌릴 수 있습니다. Dev Mode MCP는 유료 Figma 플랜이 필요합니다."}, {"name": "Skills와 CLAUDE.md란 무엇인가요?", "text": "CLAUDE.md는 프로젝트 루트에 있는 마크다운 파일로, Claude Code가 모든 세션 시작 시 읽습니다 — 디자인 컨벤션을 담는 곳입니다. Skills는 Claude가 필요할 때 불러오는 반복 가능한 지시와 리소스를 패키징하며, Anthropic의 공식 Frontend Design skill을 포함합니다. Open Design은 두 가지를 엄선한 라이브러리로 제공하여 프로젝트마다 하는 설정을 건너뛰게 해 줍니다."}, {"name": "평범한 “AI 티” 미학을 어떻게 피하나요?", "text": "Frontend Design skill을 설치하고, 실제 디자인 tokens와 레퍼런스 스크린샷을 제공하며, 브랜드 규칙을 CLAUDE.md에 담고, 브라우저 검증을 활성화하세요. Open Design은 이것들을 엄선한 라이브러리로 제공하여 프로젝트마다 하는 설정을 건너뛰게 해 줍니다."}, {"name": "Open Design은 Anthropic과 제휴되어 있나요?", "text": "아니요. Claude Code는 Anthropic의 제품이며, Open Design은 이를 일급 어댑터로 지원하는 독립적인 오픈소스 프로젝트입니다. Claude와 Claude Code는 Anthropic의 상표입니다."}, {"name": "제 파일과 자격 증명은 안전한가요?", "text": "네 — Open Design은 로컬 우선이며 Apache-2.0입니다. 여러분의 파일, 산출물, DESIGN.md는 여러분 자신의 레포에 머물고, Anthropic 자격 증명은 에이전트가 직접 사용하며 결코 Open Design 서버를 거치지 않습니다."}], "ctaTitle": "Claude Code로, 개방적인 방식으로 디자인하세요.", "ctaBody": "자신의 Anthropic 키 또는 Claude 구독을 가져오고, 모든 파일을 로컬에 유지하며, 이미 쓰고 있는 에이전트 주위에 엄선된 디자인 라이브러리를 더하세요.", "ctaActions": [{"label": "Open Design 안에서 Claude Code 사용하기", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub에서 Star 누르기", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "데스크톱 앱 다운로드", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "지원되는 모든 에이전트 보기"}, + }, + 'codex': { + ...en['codex']!, + title: "디자인을 위한 Codex — Open Design", + description: "사람들이 UI와 웹 디자인에 OpenAI Codex를 활용하는 방법 — Product Design 플러그인, Figma 통합, 프런트엔드 skill — 그리고 Open Design이 Codex를 로컬 우선의 오픈소스 디자인 에이전트로 바꾸는 방식.", + breadcrumb: "Codex", + label: "에이전트 · Codex", + heading: "디자인을 위한 Codex.", + lead: "Codex는 OpenAI의 코딩 에이전트입니다. Product Design 플러그인과 Figma 통합과 함께 진지한 디자인 도구가 되었습니다. Open Design은 Codex를 오픈소스 디자인 워크플로에 연결합니다 — 자신의 OpenAI 키 또는 ChatGPT 구독, 자신의 파일, 로컬 우선.", + rich: {"heroCtaLead": "Open Design은 Codex를 로컬 우선의 오픈소스 디자인 에이전트로 바꿉니다 — 자신의 OpenAI 키, 자신의 파일, 그리고 그 주위를 감싸는 엄선된 skill 및 디자인 시스템 라이브러리.", "heroCtaActions": [{"label": "Open Design 안에서 Codex 사용하기", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub에서 Star 누르기", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "데스크톱 앱 다운로드", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex는 코드 생성기로 시작했지만, 2026년에 — 올바른 레퍼런스, skill, 검증 루프를 주기만 하면 — 실제 인터페이스를 디자인하는 신뢰할 만한 도구가 되었습니다. 이 글은 UI, 프런트엔드, 디자인 시스템 작업에 Codex를 활용하고, 이를 Open Design과 함께 구조화된 디자인 워크플로에 연결하는 실용적이고 처음부터 끝까지 이어지는 가이드입니다.", "오늘날 Codex가 무엇인지, 왜 갑자기 프런트엔드에 강한지, 처음부터 설정하는 방법, 스크린샷-투-UI 루프, 공식 Figma 왕복 연동, Cursor 및 Claude Code와의 비교, AI 결과물을 평범해 보이게 만드는 함정, 그리고 Open Design이 개방적이고 로컬 우선인 디자인 레이어로서 이 격차를 메우는 방식을 다룹니다."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Codex 디자인 피드백 루프: 터미널 에이전트, UI를 렌더링하는 브라우저, 그리고 작업 공간, 다시 돌아오는 피드백 화살표와 함께", "caption": "핵심 루프: Codex는 터미널에서 UI를 만들고, 실제 브라우저에서 렌더링하고 검증하며, 레퍼런스에 맞춰 반복합니다."}, "tocLabel": "이 페이지에서", "toc": [{"id": "what-is-codex", "label": "OpenAI Codex는 실제로 무엇인가"}, {"id": "why-design", "label": "이제 Codex가 디자인에 강한 이유"}, {"id": "setup", "label": "디자인을 위한 Codex 설정하기 (처음부터)"}, {"id": "screenshot-workflow", "label": "스크린샷-투-UI 워크플로"}, {"id": "figma", "label": "Codex + Figma 왕복 연동"}, {"id": "vs", "label": "Codex vs Cursor vs Claude Code"}, {"id": "pitfalls", "label": "함정과 “AI 티” 나는 결과물"}, {"id": "open-design", "label": "Open Design에서 Codex로 디자인하기"}, {"id": "faq", "label": "자주 묻는 질문"}], "sections": [{"id": "what-is-codex", "heading": "OpenAI Codex는 실제로 무엇인가 (그리고 무엇이 아닌가)", "blocks": [{"kind": "p", "text": "먼저, “Codex”를 검색하는 거의 모든 사람을 헷갈리게 하는 구분부터. 원래의 OpenAI Codex는 초기 GitHub Copilot을 구동하던 2021년의 코드 자동 완성 모델이었고 2023년에 폐기되었습니다. 이 페이지가 다루는 것은 그것이 아닙니다. 오늘날의 Codex는 OpenAI의 에이전트형 코딩 도구로 — 자연어 작업으로부터 코드를 계획하고, 작성하고, 실행하고, 검증합니다."}, {"kind": "p", "text": "현대의 Codex는 네 가지 표면으로 제공됩니다: 터미널 CLI(Rust로 다시 작성, Apache-2.0 라이선스), VS Code·Cursor·Windsurf용 IDE 확장, 위임된 비동기 작업을 위한 클라우드/웹 환경, 그리고 인앱 브라우저와 Computer Use를 갖춘 데스크톱 앱."}, {"kind": "steps", "items": [{"label": "기본 모델", "body": "2026년 중반 기준 권장 모델은 gpt-5.5이며, gpt-5.4는 OpenAI가 프런트엔드와 컴퓨터 사용을 위해 명시적으로 학습시킨 모델입니다."}, {"label": "지시 파일", "body": "Codex는 프로젝트 규칙을 위해 프로젝트의 AGENTS.md 파일(도구 간 표준)을 읽습니다 — 디자인 컨벤션을 담기에 자연스러운 곳입니다."}, {"label": "샌드박스", "body": "커널 수준 샌드박스(기본은 workspace-write)에서 실행되므로, UI를 편집하는 에이전트가 프로젝트 밖으로 벗어날 수 없습니다."}]}, {"kind": "ul", "items": ["공급사: OpenAI", "자격 증명: OpenAI API 키(BYOK) 또는 ChatGPT 구독(Free / Go / Plus / Pro / Business / Enterprise)", "CLI 라이선스: Apache-2.0, 오픈소스"]}]}, {"id": "why-design", "heading": "이제 Codex가 디자인에 강한 이유", "blocks": [{"kind": "p", "text": "2026년 초에 세 가지가 맞물리며 Codex를 평범한 코드 생성기가 아닌 진짜 디자인 도구로 만들었습니다."}, {"kind": "steps", "items": [{"label": "프런트엔드로 학습된 모델", "body": "OpenAI는 프런트엔드와 컴퓨터 사용을 위해 학습된 첫 번째 메인라인 모델 GPT-5.4를 선보였습니다. 디자인 워크플로 전반에서 이미지 이해가 훨씬 좋아졌고 자기 검증도 더 강해졌습니다. 최종 에셋을 확정하기 전에 무드보드와 시각적 선택지를 생성할 수도 있습니다."}, {"label": "공식 프런트엔드 skill", "body": "openai/skills 카탈로그는 실제 감각을 강제하는 엄선된 frontend-skill을 제공합니다: 카드 없는 레이아웃, 풀블리드 히어로, 브랜드 우선 위계, 절제된 모션, 서체 최대 두 종과 액센트 색 하나 — 그리고 Codex가 만들기 전에 비주얼 논지를 쓰게 합니다."}, {"label": "브라우저 검증", "body": "Playwright skill과 함께 Codex는 실제 브라우저를 열어 브레이크포인트로 크기를 바꾸고, 단지 빌드가 통과하는지만 확인하는 대신 결과물을 레퍼런스와 다시 비교합니다."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "디자인 시스템, skill, 레퍼런스 이미지가 좋은 디자인 결과물로 수렴하는 것을 보여주는 다이어그램", "caption": "감각은 여러분이 제공하는 세 가지 입력에서 나옵니다: 디자인 시스템, skill, 그리고 실제 레퍼런스 이미지."}, {"kind": "p", "text": "세 가지 모두의 바탕에 깔린 교훈: Codex는 기본적으로 감각을 가지고 있지 않습니다. 제약 — 디자인 시스템, 미학 skill, 구체적 레퍼런스 — 을 주면 좋은 디자인을 만들어 냅니다. Open Design은 바로 그 입력들을 패키징하며, 그래서 둘이 잘 맞물립니다(아래에서 자세히)."}]}, {"id": "setup", "heading": "디자인 작업을 위한 Codex 설정하기, 처음부터", "blocks": [{"kind": "p", "text": "깨끗한 머신에서 UI를 만들고 검증할 수 있는 Codex까지 가는 전체 경로는 다음과 같습니다."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "다섯 단계 설정 흐름: 설치, 인증, 구성, skill 설치, 검증", "caption": "설정 순서: 설치 → 인증 → AGENTS.md 구성 → 프런트엔드 skill 설치 → 브라우저 검증 활성화."}, {"kind": "steps", "items": [{"label": "디자인 규칙을 담기", "body": "tokens, 기본 요소, 컨벤션을 AGENTS.md 또는 DESIGN.md에 담고 Codex가 그것을 보도록 가리키세요. 그러면 결과물이 평범한 모습으로 기본 회귀하지 않고 브랜드에 맞춰집니다."}, {"label": "올바른 추론 수준 고르기", "body": "OpenAI는 낮음~중간 추론 수준이 종종 최고 설정보다 더 강한 프런트엔드 결과를 낸다고 밝힙니다."}]}]}, {"id": "screenshot-workflow", "heading": "스크린샷-투-UI 워크플로", "blocks": [{"kind": "p", "text": "Codex로 얻는 가장 효과적인 디자인 루프는 레퍼런스 이미지를 동작하는 반응형 UI로 바꾸고 맞아떨어질 때까지 반복하는 것입니다. OpenAI 자체의 안내는 다섯 단계로 압축됩니다."}, {"kind": "ol", "items": ["가지고 있는 가장 명확한 시각 레퍼런스에서 시작하세요 — 그리고 히어로 한 컷이 아니라 여러 상태(데스크톱과 모바일, hover, 빈 상태, 로딩)를 포함하세요.", "프롬프트에서 구체적으로 쓰세요. 모호한 프롬프트는 평범한 UI를 낳습니다.", "디자인 시스템을 준비하고, tokens와 정식 기본 요소가 어디에 있는지 Codex에게 알려 주세요.", "Codex가 실제 브라우저에서 렌더링하고 브레이크포인트로 크기를 바꾸도록 Playwright 대화형 skill을 활성화하세요.", "Codex가 자신의 구현을 스크린샷과 다시 비교하게 하여 반복하세요 — 단지 빌드가 되는지만 확인하지 마세요."]}, {"kind": "p", "text": "스크린샷을 터미널로 끌어다 놓거나 image 플래그로 이미지를 넣은 다음, 구체적인 제약과 함께 프롬프트하세요:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "두 번째 터미널에서 dev 서버를 띄우고, 프롬프트는 작고 집중되게 유지하며, 좋은 반복은 커밋하고 나쁜 반복은 되돌리세요(되돌릴 때 Codex에게 알려 주세요). 그래야 각 패스가 깨끗한 기반 위에서 쌓입니다."}]}, {"id": "figma", "heading": "Codex + Figma: 디자인 ↔ 코드 왕복 연동", "blocks": [{"kind": "p", "text": "2026년 2월, OpenAI와 Figma는 공식 파트너십을 발표하며 앞선 Figma MCP 베타를 일급의 양방향 통합으로 끌어올렸습니다. 양쪽 방향 모두에서 작동합니다."}, {"kind": "steps", "items": [{"label": "디자인 → 코드", "body": "Figma에서 프레임의 “link to selection”을 복사해 get_design_context와 함께 Codex에 붙여넣고, 기존 컴포넌트 라이브러리를 사용해 디자인을 구현하도록 요청하세요."}, {"label": "코드 → 디자인", "body": "generate_figma_design 도구(“Code to Canvas”)는 실행 중인 라이브 UI를 편집 가능한 Figma 프레임으로 — 화면 전체, 선택한 요소, 또는 파일 전체로 — 되돌립니다."}]}, {"kind": "p", "text": "Figma MCP는 원격 서버로 실행되며 요청 한도에서 면제됩니다. 한 번 추가하면 Codex, Claude Code, Cursor, VS Code 등에서 사용할 수 있습니다 — 바로 Open Design이 오케스트레이션하도록 설계된 이식 가능한 멀티 에이전트 역량의 전형입니다."}]}, {"id": "vs", "heading": "디자인을 위한 Codex vs Cursor vs Claude Code", "blocks": [{"kind": "p", "text": "디자인 작업에 단 하나의 승자는 없습니다 — 에이전트마다 강점이 다르고, 숙련된 팀은 이들을 함께 쌓아 씁니다. 공정한 요약은 다음과 같습니다:"}, {"kind": "table", "columns": ["에이전트", "디자인 강점", "가장 적합한 경우"], "rows": [["Codex", "GPT-5.4 + frontend-skill 이후의 강한 비주얼 완성도; 이미지 이해", "위임된 비동기 빌드, 샌드박스 실행, 이식 가능한 AGENTS.md 규칙"], ["Cursor", "라이브 미리보기와 인라인 편집을 갖춘 시각적 만들고-보기 루프", "IDE 안에서의 긴밀한 반복하며-지켜보는 UI 작업"], ["Claude Code", "구체적인 디자인 결정(hex, 간격, 타입)과 코드베이스를 이해하는 UX", "프런트엔드 추론과 대형 컨텍스트 리팩터링"]]}, {"kind": "p", "text": "커뮤니티에서 반복되는 결론은 감각이 사람에게서 나온다는 것입니다: 셋 모두 skill, 레퍼런스, 제약이 없으면 평범한 미학으로 기본 회귀합니다. 그것이 풀어야 할 진짜 문제이며 — 모델 모양이 아니라 디자인 도구 모양의 문제입니다."}]}, {"id": "pitfalls", "heading": "함정, 그리고 “AI 티” 나는 결과물을 피하는 법", "blocks": [{"kind": "p", "text": "Codex가 생성한 디자인에 대한 가장 흔한 불만은 평범해 보인다는 것입니다 — 부드러운 그라데이션, 떠 있는 패널, 과도하게 둥근 모서리, 극적인 그림자, “AI가 만들었다고 외치는” Inter-와-보라색 분위기. 그 밖에 보고된 문제로는 깨진 모바일 레이아웃, 지시문이 UI 카피에 새어 나오는 것, 사용 한도에 빠르게 도달하는 것이 있습니다."}, {"kind": "steps", "items": [{"label": "프런트엔드 skill 설치하기", "body": "엄선된 미학 skill은 Codex가 기본 모습 대신 실제 방향에 전념하도록 강제합니다."}, {"label": "Playwright 검증 활성화하기", "body": "Codex가 브레이크포인트 전반에서 렌더링하고 스스로 점검하게 하여 레이아웃이 모바일에서 조용히 깨지지 않도록 하세요."}, {"label": "tokens와 레퍼런스 제공하기", "body": "실제 디자인 tokens와 레퍼런스 스크린샷은 결과물 품질을 좌우하는 가장 큰 단일 지렛대입니다."}, {"label": "AGENTS.md에 규칙 담기", "body": "“히어로 카드 금지, 서체 최대 두 종, 브랜드 우선 위계” 같은 스타일 규칙을 에이전트가 매번 읽는 곳에 두세요."}]}, {"kind": "p", "text": "모든 완화책이 에이전트에게 엄선된 디자인 컨텍스트를 주는 것임에 주목하세요. 그 컨텍스트를 프로젝트마다 손으로 유지하는 수고가 바로 Open Design이 없애는 것입니다."}]}, {"id": "open-design", "heading": "Open Design 안에서 Codex로 디자인하기", "blocks": [{"kind": "p", "text": "Open Design은 위 워크플로가 계속 요구하던 그 오픈소스 디자인 레이어입니다. Codex를 일급 어댑터로 취급하고 엄선된 skill 및 디자인 시스템 라이브러리, 구조화된 렌더 파이프라인, 로컬 데스크톱 UI로 감싸 줍니다 — 그래서 Codex를 좋게 만드는 디자인 컨텍스트가 매번 손으로 조립하는 대신 첫 실행부터 갖춰져 있습니다."}, {"kind": "ol", "items": ["Open Design을 설치하고 에이전트로 Codex를 선택하세요.", "OpenAI API 키(BYOK) 또는 ChatGPT 구독으로 인증하세요 — 자격 증명은 여러분의 머신에 머물며 결코 저희를 거쳐 프록시되지 않습니다.", "디자인 시스템과 skill을 고른 다음, 일관된 감각으로 덱, 프로토타입, 랜딩 페이지를 생성하세요.", "모든 산출물과 DESIGN.md 파일은 호스팅 클라우드가 아니라 여러분 자신의 레포에 존재합니다."]}, {"kind": "p", "text": "같은 Codex 에이전트, 같은 키 — 그 위에 실제로 이식 가능한 오픈소스 디자인 워크플로가 더해집니다. 로컬 우선이며 Apache-2.0이라, 여러분의 작업이나 자격 증명 중 어떤 것도 머신을 떠나지 않습니다."}]}], "faqTitle": "자주 묻는 질문", "faq": [{"name": "OpenAI Codex가 정말 디자인 작업을 할 수 있나요?", "text": "네 — 프런트엔드 skill, 디자인 시스템, 그리고 실제 레퍼런스 이미지가 컨텍스트에 있으면 Codex는(특히 GPT-5.4에서) 양산 품질의 반응형 UI를 만들고 브라우저에서 검증할 수 있습니다. 그런 컨텍스트가 없으면 평범한 모습으로 기본 회귀하는 경향이 있는데, 그것이 바로 Open Design이 메우는 격차입니다."}, {"name": "이것이 OpenAI Codex Product Design 플러그인인가요?", "text": "아니요. Open Design은 Codex를 에이전트로 통합하는 독립적인 오픈소스 프로젝트입니다. 로컬 우선의 개방적인 skill 및 디자인 시스템 라이브러리로 OpenAI 자체 도구를 보완합니다."}, {"name": "Codex로 디자인하려면 ChatGPT 구독이 필요한가요?", "text": "OpenAI API 키(BYOK) 또는 ChatGPT 구독 중 어느 쪽이든 사용할 수 있습니다. ChatGPT 로그인은 대체로 더 넉넉한 한도를 주며, Open Design은 어느 경우든 결코 여러분의 자격 증명을 프록시하지 않습니다."}, {"name": "프런트엔드 디자인에는 Codex인가요, Claude Code인가요?", "text": "둘 다 강력합니다. Claude Code는 구체적이고 코드베이스를 이해하는 디자인 결정으로 알려져 있고, Codex는 GPT-5.4 이후 강한 비주얼 완성도를 갖추었으며 위임된 샌드박스 빌드에 능합니다. 많은 팀이 둘 다 씁니다 — Open Design을 쓰면 디자인 워크플로를 바꾸지 않고 에이전트를 전환할 수 있습니다."}, {"name": "Codex를 Figma에 어떻게 연결하나요?", "text": "공식 Figma MCP 서버를 추가하세요(codex mcp add figma --url https://mcp.figma.com/mcp). 그러면 get_design_context로 Figma 프레임을 코드로 구현하고, generate_figma_design으로 실행 중인 UI를 편집 가능한 Figma 프레임으로 되돌릴 수 있습니다."}, {"name": "평범한 “AI 티” 미학을 어떻게 피하나요?", "text": "프런트엔드 skill을 설치하고, 실제 디자인 tokens와 레퍼런스 스크린샷을 제공하며, 브랜드 규칙을 AGENTS.md에 담고, Playwright 검증을 활성화하세요. Open Design은 이것들을 엄선한 라이브러리로 제공하여 프로젝트마다 하는 설정을 건너뛰게 해 줍니다."}, {"name": "Open Design은 OpenAI와 제휴되어 있나요?", "text": "아니요. Codex는 OpenAI의 제품이며, Open Design은 이를 일급 어댑터로 지원하는 독립적인 오픈소스 프로젝트입니다. OpenAI와 Codex는 OpenAI의 상표입니다."}, {"name": "제 파일과 자격 증명은 안전한가요?", "text": "네 — Open Design은 로컬 우선입니다. 여러분의 파일, 산출물, DESIGN.md는 여러분 자신의 레포에 머물고, OpenAI 자격 증명은 에이전트가 직접 사용하며 결코 Open Design 서버를 거치지 않습니다."}], "ctaTitle": "Codex로, 개방적인 방식으로 디자인하세요.", "ctaBody": "자신의 OpenAI 키를 가져오고, 모든 파일을 로컬에 유지하며, 이미 쓰고 있는 에이전트 주위에 엄선된 디자인 라이브러리를 더하세요.", "ctaActions": [{"label": "Open Design 안에서 Codex 사용하기", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub에서 Star 누르기", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "데스크톱 앱 다운로드", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "지원되는 모든 에이전트 보기"}, + }, + 'cursor': { + ...en['cursor']!, + title: "디자이너를 위한 Cursor — Open Design", + description: "디자이너가 UI와 웹 디자인에 Cursor를 활용하는 방법 — Design Mode, Figma-투-코드, Figma MCP — 그리고 Open Design이 Cursor를 로컬 우선의 오픈소스 디자인 에이전트로 바꾸는 방식.", + breadcrumb: "Cursor", + label: "에이전트 · Cursor", + heading: "디자이너를 위한 Cursor.", + lead: "Cursor는 AI 코드 에디터이며, 이제 시각적 Design Mode를 갖추었습니다. 디자이너는 이를 활용해 포인팅과 드로잉으로 UI를 편집하고 Figma를 코드로 바꿉니다. Open Design은 Cursor Agent를 파일을 로컬에 유지하는 오픈소스 디자인 워크플로에 연결합니다.", + rich: {"heroCtaLead": "Open Design은 Cursor를 로컬 우선의 오픈소스 디자인 에이전트로 바꿉니다 — 자신의 Cursor 계정 또는 모델 키, 자신의 파일, 그리고 그 주위를 감싸는 엄선된 skill 및 디자인 시스템 라이브러리.", "heroCtaActions": [{"label": "Open Design 안에서 Cursor 사용하기", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub에서 Star 누르기", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "데스크톱 앱 다운로드", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor는 “만들고 렌더링되는 것을 지켜본다”를 UI 출시의 기본 방식으로 만든 AI 우선 코드 에디터입니다. Agent 모드, 인라인 편집, 에디터 내 미리보기, 그리고 MCP를 통한 Figma와 함께 — 올바른 레퍼런스, 규칙, 검증 루프를 주기만 하면 — 진정한 디자인 도구가 되었습니다. 이 글은 UI, 프런트엔드, 디자인 시스템 작업에 Cursor를 활용하고, 이를 Open Design과 함께 구조화된 디자인 워크플로에 연결하는 실용적이고 처음부터 끝까지 이어지는 가이드입니다.", "Cursor가 실제로 무엇인지, 왜 긴밀한 반복하며-지켜보는 루프가 디자인에 좋은지, 처음부터 설정하는 방법, 스크린샷-과-미리보기-투-UI 루프, MCP를 통한 Figma 왕복 연동, Codex 및 Claude Code와의 비교, AI 결과물을 평범해 보이게 만드는 함정, 그리고 Open Design이 개방적이고 로컬 우선인 디자인 레이어로서 이 격차를 메우는 방식을 다룹니다."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Cursor 디자인 수렴: 왼쪽에 에디터, 가운데에 Cursor 마크를 중심에 둔 엄선된 skill 및 디자인 시스템 허브, 오른쪽에 렌더링된 UI", "caption": "핵심 아이디어: Cursor는 에디터에서 UI를 편집하고 렌더링하며, 엄선된 디자인 허브가 결과물을 의도적으로 보이게 만드는 시스템, skill, 레퍼런스를 공급합니다."}, "tocLabel": "이 페이지에서", "toc": [{"id": "what-is-cursor", "label": "Cursor는 실제로 무엇인가"}, {"id": "why-design", "label": "Cursor가 디자인에 강한 이유"}, {"id": "setup", "label": "디자인을 위한 Cursor 설정하기 (처음부터)"}, {"id": "preview-workflow", "label": "미리보기-투-UI 워크플로"}, {"id": "figma", "label": "MCP를 통한 Cursor + Figma"}, {"id": "vs", "label": "Cursor vs Codex vs Claude Code"}, {"id": "pitfalls", "label": "함정과 “AI 티” 나는 결과물"}, {"id": "open-design", "label": "Open Design에서 Cursor로 디자인하기"}, {"id": "faq", "label": "자주 묻는 질문"}], "sections": [{"id": "what-is-cursor", "heading": "Cursor는 실제로 무엇인가", "blocks": [{"kind": "p", "text": "Cursor는 Anysphere가 만든 AI 우선 코드 에디터입니다. VS Code의 포크라서 익숙한 에디터, 확장, 키바인딩을 유지하지만, 프로젝트 전체를 읽고 여러 파일을 편집하며 명령을 실행하고 여러분과 함께 루프를 돌며 반복할 수 있는 AI 에이전트를 중심으로 워크플로를 다시 짰습니다."}, {"kind": "p", "text": "디자인 작업에서 중요한 표면은 Agent 모드(원하는 결과를 설명하면 Cursor가 파일 전반에 걸쳐 계획하고 편집), 빠른 조정을 위한 인라인 편집과 Tab 자동 완성, 창을 떠나지 않고 실행 중인 UI를 볼 수 있는 에디터 내 미리보기/브라우저, 그리고 라이브 Figma 파일 같은 외부 컨텍스트를 끌어오게 해 주는 MCP 지원입니다."}, {"kind": "steps", "items": [{"label": "프로젝트 규칙", "body": "Cursor는 프로젝트 지시 파일 — `.cursor/rules` 아래 버전 관리되는 `.mdc` 규칙, 그리고 평문 `AGENTS.md` — 을 읽으므로, 에이전트가 매번 읽는 곳에 디자인 컨벤션을 담을 수 있습니다."}, {"label": "모델", "body": "Cursor는 모델에 유연합니다: 구독을 통해 프런티어 모델을 제공하고, 자신의 모델 키를 가져오는 것도 지원하므로 같은 에디터 워크플로 뒤의 엔진을 직접 고를 수 있습니다."}, {"label": "MCP", "body": "Model Context Protocol을 구사하므로 외부 서버 — 가장 관련성 높은 Figma MCP 서버 — 가 에이전트의 일급 컨텍스트가 됩니다."}]}, {"kind": "ul", "items": ["공급사: Anysphere", "자격 증명: Cursor 계정 / 구독(Hobby / Pro / Business) 또는 자신의 모델 키(BYOK)", "형태: 에디터 내 에이전트와 미리보기를 갖춘 AI 우선 코드 에디터(VS Code 포크)"]}]}, {"id": "why-design", "heading": "Cursor가 디자인에 강한 이유", "blocks": [{"kind": "p", "text": "Cursor의 디자인 강점은 단일 기능이 아닙니다 — 만들고-보기 루프의 긴밀함입니다. 세 가지가 이를 평범한 코드 생성기가 아닌 디자인 도구처럼 느껴지게 합니다."}, {"kind": "steps", "items": [{"label": "긴밀한 반복하며-지켜보는 루프", "body": "프롬프트하면 Cursor가 파일 전반을 편집하고, 에디터 내 미리보기가 결과를 즉시 렌더링합니다 — 그래서 별도의 터미널과 브라우저를 오가는 대신 몇 초 만에 간격, 위계, 모션을 조정합니다."}, {"label": "직접 시각 편집", "body": "채팅을 넘어, Cursor는 미리보기에서 요소를 선택해 스타일을 미세 조정하게 해 주므로, 작은 시각적 수정이 코드 고고학이 아니라 디자인 편집처럼 느껴집니다."}, {"label": "프로젝트 규칙과 MCP 컨텍스트", "body": "`.cursor/rules`(또는 `AGENTS.md`)와 Figma MCP 서버와 함께, 에이전트는 추측하는 대신 여러분의 tokens, 컴포넌트, 실제 디자인 명세에 맞춰 작업합니다."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "디자인 시스템, skill, 레퍼런스 이미지가 좋은 디자인 결과물로 수렴하는 것을 보여주는 다이어그램", "caption": "감각은 여러분이 제공하는 세 가지 입력에서 나옵니다: 디자인 시스템, skill, 그리고 실제 레퍼런스 이미지."}, {"kind": "p", "text": "교훈은 모든 에이전트가 가르치는 것과 같습니다: Cursor는 기본적으로 감각을 가지고 있지 않습니다. 제약 — 디자인 시스템, 미학 skill, 구체적 레퍼런스 — 을 주면 좋은 디자인을 만들어 냅니다. Open Design은 바로 그 입력들을 패키징하며, 그래서 둘이 잘 맞물립니다(아래에서 자세히)."}]}, {"id": "setup", "heading": "디자인 작업을 위한 Cursor 설정하기, 처음부터", "blocks": [{"kind": "p", "text": "깨끗한 머신에서 디자인 시스템에 맞춰 UI를 만들고, 미리 보고, 검증할 수 있는 Cursor까지 가는 전체 경로는 다음과 같습니다."}, {"kind": "ol", "items": ["cursor.com에서 Cursor를 설치하고 Cursor 계정으로 로그인하거나, Settings에서 자신의 모델 키(BYOK)를 구성하세요.", "프로젝트를 열고 채팅 / Agent 패널에서 모델을 고르세요.", "프로젝트 규칙을 추가하세요: 구조화되고 glob 범위가 지정된 컨벤션을 위해 `.cursor/rules/*.mdc`를, 또는 간단하고 읽기 쉬운 지시를 위해 평문 `AGENTS.md`를 만드세요.", "에이전트가 라이브 디자인 컨텍스트를 읽을 수 있도록 Figma MCP 서버를 연결하세요(선택).", "dev 서버를 실행하고 에디터 내 미리보기를 사용해 반복하면서 UI를 보고 검증하세요."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "다섯 단계 설정 흐름: 설치, 인증, 규칙 구성, skill 추가, 검증", "caption": "설정 순서: 설치 → 인증 → 프로젝트 규칙 구성 → skill 추가 → 미리보기 검증 활성화."}, {"kind": "p", "text": "최소한의 프로젝트 규칙 파일은 에이전트가 평범한 모습으로 기본 회귀하는 대신 브랜드에 맞춰 디자인하게 만듭니다. Cursor가 매번 읽는 곳에 두세요:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "디자인 규칙을 담기", "body": "tokens, 기본 요소, 컨벤션을 `.cursor/rules` 또는 `AGENTS.md`에 담고 Cursor가 그것을 보도록 가리키세요. 그러면 결과물이 평범한 모습으로 기본 회귀하지 않고 브랜드에 맞춰집니다."}, {"label": "프롬프트를 작게 유지하기", "body": "Cursor의 긴밀한 루프는 집중된 요청에 보답합니다 — 한 번에 컴포넌트나 상태 하나씩 반복하고 패스 사이마다 미리보기를 지켜보세요."}]}]}, {"id": "preview-workflow", "heading": "미리보기-투-UI 워크플로", "blocks": [{"kind": "p", "text": "Cursor로 얻는 가장 효과적인 디자인 루프는 레퍼런스를 동작하는 반응형 UI로 바꾸고 에디터에서 맞아떨어질 때까지 반복하는 것입니다 — 추측하는 대신 내내 라이브 미리보기를 지켜보면서."}, {"kind": "ol", "items": ["가지고 있는 가장 명확한 시각 레퍼런스에서 시작하세요 — 그리고 히어로 한 컷이 아니라 여러 상태(데스크톱과 모바일, hover, 빈 상태, 로딩)를 포함하세요.", "프롬프트에서 구체적으로 쓰세요. 모호한 프롬프트는 평범한 UI를 낳습니다.", "디자인 시스템을 준비하고, tokens와 정식 기본 요소가 어디에 있는지 Cursor에게 알려 주세요.", "에디터 내 미리보기를 열어 두고 dev 서버를 실행해 각 편집이 여러분이 신경 쓰는 브레이크포인트에서 즉시 렌더링되도록 하세요.", "렌더링된 UI를 레퍼런스와 다시 비교하며 반복하세요 — 그리고 작은 시각적 수정에는 미리보기에서의 직접 요소 선택을 사용하세요."]}, {"kind": "p", "text": "채팅에 이미지를 첨부해 레퍼런스를 넣은 다음, 구체적인 제약과 함께 프롬프트하세요:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "좋은 반복은 커밋하고 나쁜 반복은 되돌리세요(되돌릴 때 Cursor에게 알려 주세요). 그래야 각 패스가 깨끗한 기반 위에서 쌓입니다 — 어떤 에이전트 루프든 흐트러지지 않게 하는 바로 그 규율입니다."}]}, {"id": "figma", "heading": "Cursor + Figma: MCP를 통한 디자인 ↔ 코드", "blocks": [{"kind": "p", "text": "Cursor는 공식 Figma MCP 서버를 통해 Figma에 연결되며, 이는 에이전트에게 납작한 스크린샷이 아니라 라이브 Figma 파일에 대한 구조화된 접근을 줍니다. 그래서 핸드오프에서 추측이 사라집니다."}, {"kind": "steps", "items": [{"label": "디자인 → 코드", "body": "Figma에서 프레임의 링크를 복사해 Cursor에 붙여넣고, 디자인을 구현하도록 요청하세요. MCP 서버는 실제 디자인 컨텍스트 — 컴포넌트, 변수, 레이아웃 데이터, tokens — 를 노출하므로, 생성된 코드가 원본을 근사하는 대신 일치시킵니다."}, {"label": "정렬 유지하기", "body": "Figma에서 디자인 tokens, 스타일, 컴포넌트를 일관되게 사용하면(가능한 경우 Code Connect와 함께), Cursor의 결과물은 기본 요소를 새로 만들지 않고 여러분의 실제 디자인 시스템에 매핑된 상태로 유지됩니다."}]}, {"kind": "p", "text": "원격 Figma MCP 서버를 한 번 설정하면 Cursor에서 일급 컨텍스트로 사용할 수 있습니다. MCP가 개방형 표준이라, 같은 서버를 Cursor, Claude Code, Codex, VS Code에서 재사용할 수 있습니다 — 바로 Open Design이 오케스트레이션하도록 설계된 이식 가능한 멀티 에이전트 역량의 전형입니다."}]}, {"id": "vs", "heading": "디자인을 위한 Cursor vs Codex vs Claude Code", "blocks": [{"kind": "p", "text": "디자인 작업에 단 하나의 승자는 없습니다 — 에이전트마다 강점이 다르고, 숙련된 팀은 이들을 함께 쌓아 씁니다. 공정한 요약은 다음과 같습니다:"}, {"kind": "table", "columns": ["에이전트", "디자인 강점", "가장 적합한 경우"], "rows": [["Cursor", "라이브 에디터 내 미리보기와 직접 요소 편집을 갖춘 시각적 만들고-보기 루프", "IDE 안에서의 긴밀한 반복하며-지켜보는 UI 작업"], ["Codex", "프런트엔드 skill과 함께하는 강한 비주얼 완성도; 이미지 이해와 샌드박스 실행", "위임된 비동기 빌드와 이식 가능한 AGENTS.md 규칙"], ["Claude Code", "구체적인 디자인 결정(hex, 간격, 타입)과 코드베이스를 이해하는 UX", "프런트엔드 추론과 대형 컨텍스트 리팩터링"]]}, {"kind": "p", "text": "커뮤니티에서 반복되는 결론은 감각이 사람에게서 나온다는 것입니다: 셋 모두 skill, 레퍼런스, 제약이 없으면 평범한 미학으로 기본 회귀합니다. 그것이 풀어야 할 진짜 문제이며 — 모델 모양이 아니라 디자인 도구 모양의 문제입니다."}]}, {"id": "pitfalls", "heading": "함정, 그리고 “AI 티” 나는 결과물을 피하는 법", "blocks": [{"kind": "p", "text": "Cursor가 생성한 디자인에 대한 가장 흔한 불만은 평범해 보인다는 것입니다 — 부드러운 그라데이션, 떠 있는 패널, 과도하게 둥근 모서리, 극적인 그림자, “AI가 만들었다고 외치는” Inter-와-보라색 분위기. 그 밖에 보고된 문제로는 모바일에서 깨지는 레이아웃과 지시문이 UI 카피에 새어 나오는 것이 있습니다."}, {"kind": "steps", "items": [{"label": "디자인 skill 추가하기", "body": "엄선된 미학 skill은 Cursor가 기본 모습 대신 실제 방향에 전념하도록 강제합니다."}, {"label": "미리보기로 검증하기", "body": "에디터 내 미리보기에서 브레이크포인트 전반에 걸쳐 렌더링하고 스스로 점검하여 레이아웃이 모바일에서 조용히 깨지지 않도록 하세요."}, {"label": "tokens와 레퍼런스 제공하기", "body": "실제 디자인 tokens와 레퍼런스 스크린샷은 결과물 품질을 좌우하는 가장 큰 단일 지렛대입니다."}, {"label": "`.cursor/rules`에 규칙 담기", "body": "“히어로 카드 금지, 서체 최대 두 종, 브랜드 우선 위계” 같은 스타일 규칙을 에이전트가 매번 읽는 곳에 두세요."}]}, {"kind": "p", "text": "모든 완화책이 에이전트에게 엄선된 디자인 컨텍스트를 주는 것임에 주목하세요. 그 컨텍스트를 프로젝트마다 손으로 유지하는 수고가 바로 Open Design이 없애는 것입니다."}]}, {"id": "open-design", "heading": "Open Design 안에서 Cursor로 디자인하기", "blocks": [{"kind": "p", "text": "Open Design은 위 워크플로가 계속 요구하던 그 오픈소스 디자인 레이어입니다. Cursor를 일급 어댑터로 취급하고 엄선된 skill 및 디자인 시스템 라이브러리, 구조화된 렌더 파이프라인, 로컬 데스크톱 UI로 감싸 줍니다 — 그래서 Cursor를 좋게 만드는 디자인 컨텍스트가 매번 손으로 조립하는 대신 첫 실행부터 갖춰져 있습니다."}, {"kind": "ol", "items": ["Open Design을 설치하고 에이전트로 Cursor를 선택하세요.", "Cursor 계정 또는 자신의 모델 키(BYOK)로 인증하세요 — 자격 증명은 여러분의 머신에 머물며 결코 저희를 거쳐 프록시되지 않습니다.", "디자인 시스템과 skill을 고른 다음, 일관된 감각으로 덱, 프로토타입, 랜딩 페이지를 생성하세요.", "모든 산출물과 DESIGN.md 파일은 호스팅 클라우드가 아니라 여러분 자신의 레포에 존재합니다."]}, {"kind": "p", "text": "같은 Cursor 에이전트, 같은 키 — 그 위에 실제로 이식 가능한 오픈소스 디자인 워크플로가 더해집니다. 로컬 우선이며 Apache-2.0이라, 여러분의 작업이나 자격 증명 중 어떤 것도 머신을 떠나지 않습니다."}]}], "faqTitle": "자주 묻는 질문", "faq": [{"name": "Cursor가 정말 디자인 작업을 할 수 있나요?", "text": "네 — 디자인 skill, 디자인 시스템, 그리고 실제 레퍼런스 이미지가 컨텍스트에 있으면 Cursor는 양산 품질의 반응형 UI를 만들고, 에디터 내 미리보기로 시각적으로 검증하고 다듬게 해 줍니다. 그런 컨텍스트가 없으면 평범한 모습으로 기본 회귀하는 경향이 있는데, 그것이 바로 Open Design이 메우는 격차입니다."}, {"name": "이것이 공식 Cursor 제품인가요?", "text": "아니요. Open Design은 Cursor를 에이전트로 통합하는 독립적인 오픈소스 프로젝트입니다. 로컬 우선의 개방적인 skill 및 디자인 시스템 라이브러리로 Cursor를 보완합니다."}, {"name": "Cursor로 디자인하려면 Cursor 구독이 필요한가요?", "text": "Cursor 계정 / 구독을 사용하거나 자신의 모델 키(BYOK)를 가져올 수 있습니다. Open Design은 어느 경우든 결코 여러분의 자격 증명을 프록시하지 않습니다 — 자격 증명은 에이전트가 직접 사용합니다."}, {"name": "프런트엔드 디자인에는 Cursor인가요, Claude Code인가요?", "text": "둘 다 강력합니다. Claude Code는 구체적이고 코드베이스를 이해하는 디자인 결정으로 알려져 있고, Cursor의 강점은 에디터 안의 라이브 미리보기를 갖춘 긴밀한 만들고-보기 루프입니다. 많은 팀이 둘 다 씁니다 — Open Design을 쓰면 디자인 워크플로를 바꾸지 않고 에이전트를 전환할 수 있습니다."}, {"name": "Cursor를 Figma에 어떻게 연결하나요?", "text": "Cursor에 공식 Figma MCP 서버를 추가한 다음, Figma 프레임 링크를 채팅에 붙여넣고 Cursor에게 구현하도록 요청하세요. 서버는 실제 컴포넌트, 변수, 레이아웃 데이터를 노출하므로 생성된 코드가 원본 디자인과 일치합니다."}, {"name": "평범한 “AI 티” 미학을 어떻게 피하나요?", "text": "디자인 skill을 추가하고, 실제 디자인 tokens와 레퍼런스 스크린샷을 제공하며, 브랜드 규칙을 `.cursor/rules` 또는 `AGENTS.md`에 담고, 미리보기에서 브레이크포인트 전반을 검증하세요. Open Design은 이것들을 엄선한 라이브러리로 제공하여 프로젝트마다 하는 설정을 건너뛰게 해 줍니다."}, {"name": "Open Design은 Cursor 또는 Anysphere와 제휴되어 있나요?", "text": "아니요. Cursor는 Anysphere의 제품이며, Open Design은 이를 일급 어댑터로 지원하는 독립적인 오픈소스 프로젝트입니다. Cursor와 Anysphere는 Anysphere, Inc.의 상표입니다."}, {"name": "제 파일과 자격 증명은 안전한가요?", "text": "네 — Open Design은 로컬 우선입니다. 여러분의 파일, 산출물, DESIGN.md는 여러분 자신의 레포에 머물고, Cursor 또는 모델 자격 증명은 에이전트가 직접 사용하며 결코 Open Design 서버를 거치지 않습니다."}], "ctaTitle": "Cursor로, 개방적인 방식으로 디자인하세요.", "ctaBody": "자신의 Cursor 계정 또는 모델 키를 가져오고, 모든 파일을 로컬에 유지하며, 이미 쓰고 있는 에이전트 주위에 엄선된 디자인 라이브러리를 더하세요.", "ctaActions": [{"label": "Open Design 안에서 Cursor 사용하기", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub에서 Star 누르기", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "데스크톱 앱 다운로드", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "지원되는 모든 에이전트 보기"}, + }, + 'opencode': { + ...en['opencode']!, + title: "디자인을 위한 OpenCode — Open Design", + description: "사람들이 UI와 웹 디자인에 OpenCode를 활용하는 방법 — design.md 파일, UI/UX skill, Figma MCP — 그리고 Open Design이 OpenCode를 로컬 우선의 오픈소스 디자인 에이전트로 바꾸는 방식.", + breadcrumb: "OpenCode", + label: "에이전트 · OpenCode", + heading: "디자인을 위한 OpenCode.", + lead: "OpenCode는 오픈소스 터미널 AI 코딩 에이전트입니다. 디자이너는 여기에 디자인 skill과 DESIGN.md 파일을 붙여 실제 UI를 생성합니다. Open Design은 이를 구조화된 오픈소스 워크플로로 만듭니다 — 자신의 공급자 키를 가져오고, 모든 것을 로컬에 유지하세요.", + rich: {"heroCtaLead": "Open Design은 OpenCode를 로컬 우선의 오픈소스 디자인 에이전트로 바꿉니다 — 자신의 공급자 키로 고른 어떤 모델이든, 자신의 파일, 그리고 그 주위를 감싸는 엄선된 skill 및 디자인 시스템 라이브러리.", "heroCtaActions": [{"label": "Open Design 안에서 OpenCode 사용하기", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub에서 Star 누르기", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "데스크톱 앱 다운로드", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode는 의도적으로 모델에 구애받지 않는 오픈소스의 터미널 우선 AI 코딩 에이전트입니다: 자신의 공급자 키를 가져와 같은 워크플로 뒤에서 원하는 어떤 모델이든 실행합니다. 그 개방성은 디자인 작업에 자연스러운 기반이 됩니다 — 하지만 모든 에이전트가 그렇듯, 올바른 레퍼런스, skill, 검증 루프를 주어야만 좋은 UI를 만들어 냅니다. 이 글은 UI, 프런트엔드, 디자인 시스템 작업에 OpenCode를 활용하고, 이를 Open Design과 함께 구조화된 디자인 워크플로에 연결하는 실용적이고 처음부터 끝까지 이어지는 가이드입니다.", "OpenCode가 실제로 무엇인지, 왜 모델에 구애받지 않는 개방형 에이전트가 디자인에 잘 맞는지, 처음부터 설정하는 방법, 스크린샷-투-UI 루프, AGENTS.md와 MCP가 이를 어떻게 확장하는지, Codex·Claude Code·Cursor와의 비교, AI 결과물을 평범해 보이게 만드는 함정, 그리고 Open Design이 개방적이고 로컬 우선인 디자인 레이어로서 이 격차를 메우는 방식을 다룹니다 — 두 프로젝트 모두 오픈소스이고 여러분 자신의 머신에서 실행되므로 자연스러운 짝입니다."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "OpenCode 디자인 피드백 루프: 터미널 TUI 에이전트, UI를 렌더링하는 브라우저, 그리고 작업 공간, 다시 돌아오는 피드백 화살표와 함께", "caption": "핵심 루프: OpenCode는 터미널에서 UI를 만들고, 실제 브라우저에서 렌더링하고 검증하며, 레퍼런스에 맞춰 반복합니다 — 여러분이 고른 어떤 모델로든."}, "tocLabel": "이 페이지에서", "toc": [{"id": "what-is-opencode", "label": "OpenCode는 실제로 무엇인가"}, {"id": "why-design", "label": "개방형의 모든-모델 에이전트가 디자인에 맞는 이유"}, {"id": "setup", "label": "디자인을 위한 OpenCode 설정하기 (처음부터)"}, {"id": "screenshot-workflow", "label": "스크린샷-투-UI 워크플로"}, {"id": "extend", "label": "AGENTS.md, MCP, 그리고 공유 가능한 세션"}, {"id": "vs", "label": "OpenCode vs Codex vs Claude Code vs Cursor"}, {"id": "pitfalls", "label": "함정과 “AI 티” 나는 결과물"}, {"id": "open-design", "label": "Open Design에서 OpenCode로 디자인하기"}, {"id": "faq", "label": "자주 묻는 질문"}], "sections": [{"id": "what-is-opencode", "heading": "OpenCode는 실제로 무엇인가", "blocks": [{"kind": "p", "text": "OpenCode는 터미널을 위해 만들어진 오픈소스 AI 코딩 에이전트로, SST(Anomaly Innovations)를 만든 팀이 유지보수합니다. 저장소를 읽고, 명령을 실행하고, 파일을 편집하며, 대규모 언어 모델과 대화합니다 — 하지만 공급사에 묶인 에이전트와 달리, 자체 모델을 함께 제공하지 않습니다. 원하는 어떤 공급자와 모델이든 가리키고 자신의 키를 가져옵니다."}, {"kind": "p", "text": "터미널 UI(TUI)로 실행되며, 같은 엔진 위에 데스크톱 앱과 IDE 확장이 얹힙니다. 내부적으로 클라이언트/서버 아키텍처를 사용하므로, 실제로 작업을 하는 에이전트가 여러분이 구동하는 표면과 분리되어 있습니다. 두 가지 내장 에이전트 — build와 plan — 는 Tab 키로 전환됩니다."}, {"kind": "steps", "items": [{"label": "모델에 구애받지 않음", "body": "모델과 공급자는 개방형 카탈로그인 models.dev에서 가져옵니다. opencode.json에서 provider/model-id 문자열로 구성하고, 로드하고 싶지 않은 공급자를 비활성화할 수 있습니다 — 그래서 같은 디자인 워크플로가 Anthropic, OpenAI, Google, OpenRouter, 로컬 모델 등에서 실행됩니다."}, {"label": "지시 파일", "body": "OpenCode는 프로젝트 규칙을 위해 프로젝트의 AGENTS.md 파일(도구 간 표준이며 CLAUDE.md와도 호환)을 읽습니다 — 디자인 컨벤션을 담기에 자연스러운 곳입니다. /init를 실행해 하나 생성하세요."}, {"label": "확장 가능", "body": "LSP 통합, MCP 서버, 테마, 키바인드, 커스텀 명령을 지원하며, 협업을 위한 공유 가능한 세션 링크도 제공합니다."}]}, {"kind": "ul", "items": ["유지보수: SST / Anomaly Innovations (오픈소스 프로젝트)", "자격 증명: 자신의 모델 공급자 API 키 — BYOK, 공급사 종속 없음", "라이선스: MIT, 오픈소스"]}]}, {"id": "why-design", "heading": "개방형의 모든-모델 에이전트가 디자인 작업에 맞는 이유", "blocks": [{"kind": "p", "text": "OpenCode는 공급사 에이전트처럼 단일한 “디자인 모델”을 가지고 있지 않습니다 — 그리고 그것이 핵심입니다. 모델에 구애받지 않고 개방적이기 때문에, 현재 프런트엔드에 가장 강한 모델로 같은 디자인 워크플로를 실행하고, 나중에 바꾸고, 로컬 모델로 되돌릴 수 있습니다. 모두 설정을 바꾸지 않고서."}, {"kind": "p", "text": "하지만 모델 선택만으로는 감각을 살 수 없습니다. 모든 코딩 에이전트가 그렇듯, OpenCode도 제약을 주지 않으면 평범한 UI를 만듭니다. 좋은 디자인 결과물은 여러분이 제공하는 세 가지 입력에서 나옵니다."}, {"kind": "steps", "items": [{"label": "디자인 시스템", "body": "에이전트가 재사용하는 실제 tokens, 기본 요소, 컨벤션 — 그래서 결과물이 평범한 모습으로 기본 회귀하지 않고 브랜드에 맞춰집니다."}, {"label": "미학 skill", "body": "실제 감각을 강제하는 엄선된 skill — 절제된 모션, 브랜드 우선 위계, 서체 최대 두 종과 액센트 색 하나 — 그리고 에이전트가 만들기 전에 방향에 전념하게 합니다."}, {"label": "구체적 레퍼런스", "body": "실제 레퍼런스 이미지와 여러 상태(데스크톱과 모바일, hover, 빈 상태, 로딩), 히어로 한 컷이 아니라."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "디자인 시스템, skill, 레퍼런스 이미지가 좋은 디자인 결과물로 수렴하는 것을 보여주는 다이어그램", "caption": "감각은 여러분이 제공하는 세 가지 입력에서 나옵니다: 디자인 시스템, skill, 그리고 실제 레퍼런스 이미지 — 어떤 모델을 실행하든 무관하게."}, {"kind": "p", "text": "교훈: OpenCode는 모델 자유를 주지만, 감각은 여전히 엄선된 디자인 컨텍스트에서 나옵니다. Open Design은 바로 그 입력들을 패키징하며, 그래서 둘이 잘 맞물립니다 — 둘 다 오픈소스이고 로컬 우선입니다(아래에서 자세히)."}]}, {"id": "setup", "heading": "디자인 작업을 위한 OpenCode 설정하기, 처음부터", "blocks": [{"kind": "p", "text": "깨끗한 머신에서 UI를 만들고 검증할 수 있는 OpenCode까지 가는 전체 경로는 다음과 같습니다."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "다섯 단계 설정 흐름: 설치, 공급자 키로 인증, AGENTS.md 구성, skill 추가, 검증", "caption": "설정 순서: 설치 → 인증(여러분의 공급자 키) → AGENTS.md 구성 → skill 추가 → 실제 브라우저에서 검증."}, {"kind": "steps", "items": [{"label": "디자인 규칙을 담기", "body": "tokens, 기본 요소, 컨벤션을 AGENTS.md(또는 거기서 참조하는 DESIGN.md)에 담아 결과물이 평범한 모습으로 기본 회귀하지 않고 브랜드에 맞춰지도록 하세요. opencode.json의 instructions 옵션은 glob을 통해 추가 규칙 파일을 가리킬 수 있습니다."}, {"label": "유능한 모델 고르기", "body": "OpenCode는 모델에 구애받지 않으므로, 디자인 패스를 위해 현재 프런트엔드에 가장 강한 공급자/모델을 고르고 — 워크플로의 나머지는 그대로 두세요."}]}]}, {"id": "screenshot-workflow", "heading": "스크린샷-투-UI 워크플로", "blocks": [{"kind": "p", "text": "어떤 에이전트로든 얻는 가장 효과적인 디자인 루프는 레퍼런스 이미지를 동작하는 반응형 UI로 바꾸고 맞아떨어질 때까지 반복하는 것입니다. OpenCode에서도 같은 다섯 단계 형태가 적용됩니다."}, {"kind": "ol", "items": ["가지고 있는 가장 명확한 시각 레퍼런스에서 시작하세요 — 그리고 히어로 한 컷이 아니라 여러 상태(데스크톱과 모바일, hover, 빈 상태, 로딩)를 포함하세요.", "프롬프트에서 구체적으로 쓰세요. 모호한 프롬프트는 평범한 UI를 낳습니다.", "디자인 시스템을 준비하고, tokens와 정식 기본 요소가 어디에 있는지(AGENTS.md에) OpenCode에게 알려 주세요.", "dev 서버를 실행하고 에이전트가 실제 브라우저에서 렌더링하며 브레이크포인트로 크기를 바꿔 결과를 확인하게 하세요.", "OpenCode가 자신의 구현을 스크린샷과 다시 비교하게 하여 반복하세요 — 단지 빌드가 되는지만 확인하지 마세요."]}, {"kind": "p", "text": "TUI에서 @로 파일을 참조해 작업 디렉터리를 퍼지 검색하고, 앞에 !를 붙여 셸 명령을 인라인으로 실행하며, / 명령으로 동작을 구동하세요. 그런 다음 구체적인 제약과 함께 프롬프트하세요:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "프롬프트는 작고 집중되게 유지하고, 좋은 반복은 커밋하고 나쁜 반복은 되돌리세요(되돌릴 때 OpenCode에게 알려 주세요). 그래야 각 패스가 깨끗한 기반 위에서 쌓입니다."}]}, {"id": "extend", "heading": "AGENTS.md, MCP, 그리고 공유 가능한 세션", "blocks": [{"kind": "p", "text": "세 가지 확장 지점이 OpenCode를 지속적인 디자인 작업에 실용적으로 만들며, 셋 모두 개방형 디자인 워크플로에 깔끔하게 매핑됩니다."}, {"kind": "steps", "items": [{"label": "AGENTS.md 규칙", "body": "프로젝트 규칙은 레포 루트의 AGENTS.md(또는 ~/.config/opencode/AGENTS.md의 전역 규칙)에 존재합니다. 매번 읽히는, 여러분의 디자인 컨벤션을 위한 견고한 거처이며, 다른 에이전트가 쓰는 CLAUDE.md 파일과 호환됩니다."}, {"label": "MCP 서버", "body": "OpenCode는 로컬(command)과 원격(URL) MCP 서버를 모두 지원하며 mcp 키 아래에서 구성됩니다 — OpenCode뿐 아니라 여러 에이전트에서 작동하는 디자인 컨텍스트와 외부 도구를 끌어오는 이식 가능한 방법입니다."}, {"label": "공유 가능한 세션", "body": "/share 명령은 협업이나 리뷰를 위해 대화에 대한 공개 링크를 만들고, /unshare가 이를 취소합니다 — 디자인 패스에 대한 피드백을 받기에 유용합니다."}]}, {"kind": "p", "text": "이것들은 이식 가능한 멀티 에이전트 역량입니다 — 바로 Open Design이 프로젝트마다 다시 만드는 대신 오케스트레이션하도록 설계된 종류의 것입니다."}]}, {"id": "vs", "heading": "디자인을 위한 OpenCode vs Codex vs Claude Code vs Cursor", "blocks": [{"kind": "p", "text": "디자인 작업에 단 하나의 승자는 없습니다 — 에이전트마다 강점이 다르고, 숙련된 팀은 이들을 함께 쌓아 씁니다. 공정한 요약은 다음과 같습니다:"}, {"kind": "table", "columns": ["에이전트", "디자인 강점", "가장 적합한 경우"], "rows": [["OpenCode", "오픈소스이며 모델에 구애받지 않음; 하나의 터미널 워크플로 뒤에서 어떤 공급자든 실행", "BYOK 자유, 모델 전환, 완전히 개방적이고 로컬 우선인 설정"], ["Codex", "프런트엔드 skill과 함께하는 강한 비주얼 완성도; 이미지 이해", "위임된 비동기, 샌드박스 빌드, 이식 가능한 AGENTS.md 규칙"], ["Claude Code", "구체적인 디자인 결정(hex, 간격, 타입)과 코드베이스를 이해하는 UX", "프런트엔드 추론과 대형 컨텍스트 리팩터링"], ["Cursor", "라이브 미리보기와 인라인 편집을 갖춘 시각적 만들고-보기 루프", "IDE 안에서의 긴밀한 반복하며-지켜보는 UI 작업"]]}, {"kind": "p", "text": "커뮤니티에서 반복되는 결론은 감각이 사람에게서 나온다는 것입니다: 모두 skill, 레퍼런스, 제약이 없으면 평범한 미학으로 기본 회귀합니다. 그것이 풀어야 할 진짜 문제이며 — 모델 모양이 아니라 디자인 도구 모양의 문제입니다. 바로 그래서 OpenCode 같은 개방형 에이전트가 개방형 디자인 레이어와 그토록 잘 어울립니다."}]}, {"id": "pitfalls", "heading": "함정, 그리고 “AI 티” 나는 결과물을 피하는 법", "blocks": [{"kind": "p", "text": "AI가 생성한 디자인에 대한 가장 흔한 불만은 평범해 보인다는 것입니다 — 부드러운 그라데이션, 떠 있는 패널, 과도하게 둥근 모서리, 극적인 그림자, “AI가 만들었다고 외치는” Inter-와-보라색 분위기. 그 밖에 보고된 문제로는 깨진 모바일 레이아웃과 지시문이 UI 카피에 새어 나오는 것이 있습니다. 이 중 어느 것도 OpenCode만의 문제가 아닙니다. 모두 어떤 에이전트든 엄선된 디자인 컨텍스트 없이 실행될 때 일어나는 일입니다."}, {"kind": "steps", "items": [{"label": "미학 skill 추가하기", "body": "엄선된 디자인 skill은 에이전트가 기본 모습 대신 실제 방향에 전념하도록 강제합니다."}, {"label": "실제 브라우저에서 검증하기", "body": "브레이크포인트 전반에 걸쳐 렌더링하고 스스로 점검하여 레이아웃이 모바일에서 조용히 깨지지 않도록 하세요."}, {"label": "tokens와 레퍼런스 제공하기", "body": "실제 디자인 tokens와 레퍼런스 스크린샷은 결과물 품질을 좌우하는 가장 큰 단일 지렛대입니다."}, {"label": "AGENTS.md에 규칙 담기", "body": "“히어로 카드 금지, 서체 최대 두 종, 브랜드 우선 위계” 같은 스타일 규칙을 에이전트가 매번 읽는 곳에 두세요."}]}, {"kind": "p", "text": "모든 완화책이 — 어떤 모델을 실행하든 무관하게 — 에이전트에게 엄선된 디자인 컨텍스트를 주는 것임에 주목하세요. 그 컨텍스트를 프로젝트마다 손으로 유지하는 수고가 바로 Open Design이 없애는 것입니다."}]}, {"id": "open-design", "heading": "Open Design 안에서 OpenCode로 디자인하기", "blocks": [{"kind": "p", "text": "Open Design은 위 워크플로가 계속 요구하던 그 오픈소스 디자인 레이어입니다. OpenCode를 일급 어댑터로 취급하고 엄선된 skill 및 디자인 시스템 라이브러리, 구조화된 렌더 파이프라인, 로컬 데스크톱 UI로 감싸 줍니다 — 그래서 어떤 에이전트든 좋게 만드는 디자인 컨텍스트가 매번 손으로 조립하는 대신 첫 실행부터 갖춰져 있습니다. 두 프로젝트 모두 오픈소스이고 로컬 우선이라, 이 짝은 자연스럽게 잘 맞습니다."}, {"kind": "ol", "items": ["Open Design을 설치하고 에이전트로 OpenCode를 선택하세요.", "자신의 모델 공급자 API 키(BYOK)로 인증하세요 — 자격 증명은 여러분의 머신에 머물며 결코 저희를 거쳐 프록시되지 않습니다.", "어떤 공급자와 모델이든 고르고, 디자인 시스템과 skill을 더한 다음, 일관된 감각으로 덱, 프로토타입, 랜딩 페이지를 생성하세요.", "모든 산출물과 DESIGN.md 파일은 호스팅 클라우드가 아니라 여러분 자신의 레포에 존재합니다."]}, {"kind": "p", "text": "같은 OpenCode 에이전트, 같은 모델 자유 — 그 위에 실제로 이식 가능한 오픈소스 디자인 워크플로가 더해집니다. 로컬 우선이며 Apache-2.0이라, 여러분의 작업이나 자격 증명 중 어떤 것도 머신을 떠나지 않습니다."}]}], "faqTitle": "자주 묻는 질문", "faq": [{"name": "OpenCode가 정말 디자인 작업을 할 수 있나요?", "text": "네 — 미학 skill, 디자인 시스템, 그리고 실제 레퍼런스 이미지가 컨텍스트에 있으면 OpenCode는 양산 품질의 반응형 UI를 만들고 브라우저에서 검증할 수 있습니다. 모델에 구애받지 않으므로, 현재 프런트엔드에 가장 좋은 모델을 실행할 수 있습니다. 그런 엄선된 컨텍스트가 없으면 평범한 모습으로 기본 회귀하는 경향이 있는데, 그것이 바로 Open Design이 메우는 격차입니다."}, {"name": "디자인에는 OpenCode와 어떤 모델을 써야 하나요?", "text": "원하는 어떤 것이든 — OpenCode는 models.dev를 통해 공급자에 구애받지 않으므로, 같은 워크플로 뒤에서 Anthropic, OpenAI, Google, OpenRouter, 또는 로컬 모델을 실행하고 언제든 전환할 수 있습니다. 디자인 결과물의 품질은 모델 자체보다 여러분의 skill, 디자인 시스템, 레퍼런스에 훨씬 더 좌우됩니다."}, {"name": "Open Design은 OpenCode(SST) 팀이 만들었나요?", "text": "아니요. Open Design은 OpenCode를 에이전트로 통합하는 독립적인 오픈소스 프로젝트입니다. 로컬 우선의 개방적인 skill 및 디자인 시스템 라이브러리로 OpenCode를 보완합니다."}, {"name": "OpenCode로 디자인하려면 특별한 구독이 필요한가요?", "text": "아니요 — OpenCode는 BYOK입니다. 자신의 모델 공급자 API 키를 가져오고, Open Design은 결코 여러분의 자격 증명을 프록시하지 않습니다. 공급사 종속이 없습니다."}, {"name": "프런트엔드 디자인에는 OpenCode인가요, Codex인가요, Claude Code인가요?", "text": "모두 강력하며, 많은 팀이 이들을 함께 쌓아 씁니다. OpenCode의 강점은 완전히 오픈소스이고 모델에 구애받지 않는다는 점이며, Codex는 위임된 샌드박스 빌드에 뛰어나고, Claude Code는 구체적이고 코드베이스를 이해하는 디자인 결정으로 알려져 있습니다. Open Design을 쓰면 디자인 워크플로를 바꾸지 않고 에이전트를 전환할 수 있습니다."}, {"name": "디자인 컨텍스트를 위해 OpenCode를 어떻게 확장하나요?", "text": "규칙을 AGENTS.md에 담고, 이식 가능한 도구와 디자인 컨텍스트를 위해 mcp 키 아래에 MCP 서버를 추가하며, 리뷰를 위해 공유 가능한 세션을 사용하세요. Open Design은 엄선된 skill 및 디자인 시스템 라이브러리를 제공하여 프로젝트마다 하는 설정을 건너뛰게 해 줍니다."}, {"name": "Open Design은 OpenCode 또는 SST와 제휴되어 있나요?", "text": "아니요. OpenCode는 SST(Anomaly Innovations)가 유지보수하는 오픈소스 프로젝트이며, Open Design은 이를 일급 어댑터로 지원하는 독립적인 오픈소스 프로젝트입니다."}, {"name": "제 파일과 자격 증명은 안전한가요?", "text": "네 — Open Design은 로컬 우선입니다. 여러분의 파일, 산출물, DESIGN.md는 여러분 자신의 레포에 머물고, 모델 공급자 자격 증명은 에이전트가 직접 사용하며 결코 Open Design 서버를 거치지 않습니다."}], "ctaTitle": "OpenCode로, 개방적인 방식으로 디자인하세요.", "ctaBody": "자신의 모델 공급자 키를 가져오고, 모든 파일을 로컬에 유지하며, 이미 쓰고 있는 개방형 에이전트 주위에 엄선된 디자인 라이브러리를 더하세요.", "ctaActions": [{"label": "Open Design 안에서 OpenCode 사용하기", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub에서 Star 누르기", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "데스크톱 앱 다운로드", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "지원되는 모든 에이전트 보기"}, + }, + }, + 'de': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code für Design — Open Design", + description: "Wie Designer Claude Code für UI- und Webdesign nutzen und wie Open Design daraus einen echten Design-Agenten macht — local-first, BYOK, mit einer kuratierten skill- und Designsystem-Bibliothek.", + breadcrumb: "Claude Code", + label: "Agent · Claude Code", + heading: "Claude Code für Design.", + lead: "Claude Code ist der Terminal-Coding-Agent von Anthropic. Menschen nutzen ihn bereits, um UIs, Designsysteme und Landingpages zu bauen. Open Design bindet ihn in einen echten Design-Workflow ein — bring deinen Anthropic-Key oder dein Claude-Abo mit und behalte jede Datei lokal.", + rich: {"heroCtaLead": "Open Design macht Claude Code zu einem local-first, quelloffenen Design-Agenten — dein Anthropic-Key oder Claude-Abo, deine Dateien, dazu eine kuratierte skill- und Designsystem-Bibliothek drumherum.", "heroCtaActions": [{"label": "Claude Code in Open Design verwenden", "href": "/quickstart/", "variant": "primary"}, {"label": "Auf GitHub mit Stern markieren", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Desktop-App herunterladen", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code gilt weithin als der Coding-Agent mit dem besten Frontend-Geschmack — er argumentiert über Interfaces mit ungewöhnlicher Präzision, nennt exakte hex-Werte, Abstände und Schriftskalen und refaktoriert UI über eine große Codebasis hinweg, ohne den roten Faden zu verlieren. Doch ohne weitere Vorgaben tendiert er trotzdem zu einem generischen Look, solange du ihm kein Designsystem, keine skills und keine echten Referenzen an die Hand gibst. Dies ist ein praktischer End-to-End-Leitfaden, wie du Claude Code für UI-, Frontend- und Designsystem-Arbeit einsetzt und ihn mit Open Design in einen strukturierten Workflow einbindest.", "Er behandelt, was Claude Code wirklich ist, warum er im Frontend stark ist, wie du ihn von null aufsetzt, den CLAUDE.md- und Skills-Workflow, den offiziellen Figma-Roundtrip, wie er im Vergleich zu Codex und Cursor abschneidet, die Fallstricke, die KI-Output generisch wirken lassen, und wie Open Design die Lücke als offene, local-first Design-Schicht schließt."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Claude-Code-Design-Feedbackschleife: Terminal-Agent, der spezifische Designentscheidungen trifft, ein Browser, der die UI rendert, und ein Workspace, mit einem zurückführenden Feedback-Pfeil", "caption": "Die Kernschleife: Claude Code durchdenkt spezifische UI-Entscheidungen im Terminal, rendert und verifiziert sie in einem echten Browser und nähert sich deinen Referenzen an."}, "tocLabel": "Auf dieser Seite", "toc": [{"id": "what-is-claude-code", "label": "Was Claude Code wirklich ist"}, {"id": "why-design", "label": "Warum Claude Code gut im Design ist"}, {"id": "setup", "label": "Claude Code für Design einrichten (von null)"}, {"id": "skills-workflow", "label": "Der CLAUDE.md- und Skills-Workflow"}, {"id": "figma", "label": "Claude Code + Figma-Roundtrip"}, {"id": "vs", "label": "Claude Code vs. Codex vs. Cursor"}, {"id": "pitfalls", "label": "Fallstricke und der „AI-Slop“-Look"}, {"id": "open-design", "label": "Mit Claude Code in Open Design gestalten"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-claude-code", "heading": "Was Claude Code wirklich ist", "blocks": [{"kind": "p", "text": "Claude Code ist das agentische Coding-Tool von Anthropic. Es liest deine Codebasis, bearbeitet Dateien, führt Befehle aus und integriert sich in deine Dev-Tools — es plant, schreibt und verifiziert Arbeit aus Aufgaben in natürlicher Sprache, statt nur Zeilen zu vervollständigen."}, {"kind": "p", "text": "Es ist über mehrere Oberflächen verfügbar, die alle dieselbe Engine teilen: eine Terminal-CLI, IDE-Erweiterungen für VS Code, Cursor und JetBrains, eine Desktop-App mit visueller Diff-Prüfung und eine Web-Oberfläche für lang laufende Aufgaben. Deine CLAUDE.md-Dateien, Einstellungen und MCP-Server gelten über alle hinweg."}, {"kind": "steps", "items": [{"label": "Anweisungsdatei", "body": "Claude Code liest zu Beginn jeder Session eine CLAUDE.md-Datei im Projektstamm — der natürliche Ort, um deine Design-Konventionen, tokens und Review-Checklisten zu hinterlegen."}, {"label": "Skills", "body": "Agent Skills bündeln wiederverwendbare Anweisungen, Skripte und Ressourcen, die Claude bei Bedarf lädt — darunter Anthropics offizielle Frontend-Design-skill für Geschmack."}, {"label": "Plan und Subagenten", "body": "Es kann vor dem Handeln planen und Subagenten starten, die parallel an verschiedenen Teilen einer Aufgabe arbeiten, was umfangreiche UI-Refactorings kohärent hält."}]}, {"kind": "ul", "items": ["Anbieter: Anthropic", "Zugangsdaten: Anthropic-API-Key (BYOK, über die Console) oder ein Claude-Abo (Pro / Max)", "Oberflächen: Terminal-CLI, VS Code / Cursor / JetBrains-Erweiterungen, Desktop-App, Web"]}]}, {"id": "why-design", "heading": "Warum Claude Code gut im Design ist", "blocks": [{"kind": "p", "text": "Unter den Coding-Agenten hat Claude Code den Ruf, Geschmack für Frontend-Arbeit zu haben. Dafür gibt es einige Gründe."}, {"kind": "steps", "items": [{"label": "Konkrete statt vage Entscheidungen", "body": "Claude Code legt sich tendenziell auf konkrete Entscheidungen fest — exakte hex-Werte, Abstandsskalen, Schriftverläufe und Komponentenhierarchie — statt sich vage durchzulavieren, und genau das unterscheidet ein echtes Interface von einem Platzhalter."}, {"label": "Codebasis-bewusstes Denken", "body": "Mit großem Arbeitskontext refaktoriert es UI über viele Dateien gleichzeitig und nutzt deine bestehenden Komponenten und tokens wieder, statt Einzelstile neu zu erfinden."}, {"label": "Eine offizielle Frontend-skill", "body": "Anthropic liefert eine Frontend-Design-skill aus, die Claude zuerst eine Designrichtung formulieren lässt und bewusst von generischen System-Schriften und vorhersehbaren lila Verläufen wegsteuert."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Diagramm, das zeigt, wie Designsystem, skill und Referenzbild zu gutem Design-Output zusammenlaufen", "caption": "Geschmack entsteht aus drei Eingaben, die du lieferst: einem Designsystem, einer skill und echten Referenzbildern."}, {"kind": "p", "text": "Die Lektion ist dieselbe, die Anthropic über seine eigenen Modelle formuliert: Claude hat standardmäßig keinen Geschmack — sich selbst überlassen konvergiert es zum statistischen Mittelpunkt des Webdesigns (Inter, lila Verläufe, weiche Schatten). Es liefert gutes Design, wenn du ihm Vorgaben machst. Open Design bündelt genau diese Eingaben — deshalb passen die beiden zusammen (mehr dazu weiter unten)."}]}, {"id": "setup", "heading": "Claude Code für Designarbeit einrichten, von null", "blocks": [{"kind": "p", "text": "Hier ist der komplette Weg von einer frischen Maschine zu einem Claude Code, das UI bauen und verifizieren kann."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Fünfstufiger Einrichtungsablauf: installieren, authentifizieren, CLAUDE.md konfigurieren, skill hinzufügen, verifizieren", "caption": "Die Einrichtungssequenz: installieren → authentifizieren → CLAUDE.md konfigurieren → die Frontend-Design-skill hinzufügen → Browser-Verifizierung aktivieren."}, {"kind": "steps", "items": [{"label": "Hinterlege deine Designregeln", "body": "Schreibe deine tokens, Primitive und Konventionen in CLAUDE.md und verweise Claude darauf, damit der Output zu einer Marke passt, statt zu einem generischen Look zurückzufallen."}, {"label": "Browser-Verifizierung hinzufügen", "body": "Binde einen Playwright- oder Chrome-MCP ein, damit Claude in einem echten Browser rendert und seinen Output über Breakpoints hinweg prüft, statt nur zu bestätigen, dass der Build durchläuft."}]}]}, {"id": "skills-workflow", "heading": "Der CLAUDE.md- und Skills-Workflow", "blocks": [{"kind": "p", "text": "Die wirkungsvollste Design-Schleife mit Claude Code besteht darin, ihm echte Referenzen plus deinen Design-Kontext zu geben und dann zu iterieren, bis die UI passt — wobei CLAUDE.md und Skills die Vorgaben tragen, sodass du sie nicht bei jedem Prompt neu erklären musst."}, {"kind": "ol", "items": ["Beginne mit den klarsten visuellen Referenzen, die du hast — und nimm mehrere Zustände auf (Desktop und Mobile, Hover, leer, ladend), nicht nur einen Hero-Shot.", "Sei im Prompt konkret; vage Prompts erzeugen generische UI, selbst mit einem starken Agenten.", "Halte dein Designsystem und deine Konventionen in CLAUDE.md fest und sag Claude, wo die tokens und kanonischen Primitive liegen.", "Füge die Frontend-Design-skill hinzu, damit Claude sich auf eine echte ästhetische Richtung festlegt, bevor er Code schreibt.", "Binde Browser-Verifizierung ein, damit Claude rendert, auf Breakpoints umstellt und mit den Referenzen abgleicht — nicht bloß bestätigt, dass es baut."]}, {"kind": "p", "text": "Wirf ein Referenzbild in die Session und prompte mit konkreten Vorgaben:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Lass parallel einen Dev-Server laufen, halte Prompts klein und fokussiert und committe gute Iterationen / verwirf schlechte (und teile Claude mit, wenn du zurücksetzt), damit jeder Durchlauf auf einer sauberen Basis aufbaut. Nutze den Plan-Modus für größere Refactorings, damit du den Ansatz prüfen kannst, bevor Dateien geändert werden."}]}, {"id": "figma", "heading": "Claude Code + Figma: Design-↔-Code-Roundtrip", "blocks": [{"kind": "p", "text": "Im Februar 2026 brachten Anthropic und Figma eine erstklassige, bidirektionale Integration über den Figma-MCP-Server. Sie funktioniert in beide Richtungen."}, {"kind": "steps", "items": [{"label": "Design → Code", "body": "Wähle einen Frame in Figma aus oder füge einen Link in Claude Code ein, ziehe den Design-Kontext heran und bitte es, das Design mit deiner bestehenden Komponentenbibliothek umzusetzen. Code Connect hält den Output an deinen echten Komponenten ausgerichtet."}, {"label": "Code → Design", "body": "Baue ein Feature und sieh es im Browser an, sag dann „Send this to Figma“, um die laufende UI als bearbeitbare Figma-Ebenen festzuhalten — den ganzen Screen oder ein ausgewähltes Element."}]}, {"kind": "p", "text": "Installiere es einmalig mit claude plugin install figma@claude-plugins-official (Dev Mode MCP erfordert einen kostenpflichtigen Figma-Plan). Derselbe Figma-MCP steht Claude Code, Codex, Cursor und VS Code zur Verfügung — genau die Art portabler, agentenübergreifender Fähigkeit, die Open Design orchestrieren soll."}]}, {"id": "vs", "heading": "Claude Code vs. Codex vs. Cursor für Design", "blocks": [{"kind": "p", "text": "Es gibt keinen einzelnen Gewinner für Designarbeit — jeder Agent hat eine andere Stärke, und erfahrene Teams kombinieren sie. Eine faire Zusammenfassung:"}, {"kind": "table", "columns": ["Agent", "Design-Stärke", "Am besten für"], "rows": [["Claude Code", "Konkrete Designentscheidungen (hex, Abstände, Typografie) und codebasis-bewusstes UX-Denken", "Frontend-Argumentation und Refactorings mit großem Kontext"], ["Codex", "Starker visueller Feinschliff und Bildverständnis; sandboxed asynchrone Builds", "Delegierte asynchrone Builds und portable AGENTS.md-Regeln"], ["Cursor", "Visuelle Build-and-See-Schleife mit Live-Vorschau und Inline-Edits", "Enge iterieren-und-beobachten-UI-Arbeit innerhalb einer IDE"]]}, {"kind": "p", "text": "Das wiederkehrende Urteil der Community lautet, dass Geschmack von Menschen kommt: Alle drei tendieren ohne skills, Referenzen und Vorgaben zu einer generischen Ästhetik. Das ist das eigentliche Problem, das es zu lösen gilt — und es hat die Form eines Design-Tools, nicht die eines Modells."}]}, {"id": "pitfalls", "heading": "Fallstricke und wie du den „AI-Slop“-Look vermeidest", "blocks": [{"kind": "p", "text": "Selbst trotz Claude Codes Ruf für Geschmack lautet die häufigste Klage über KI-generiertes Design, dass es generisch aussieht — Inter-Schriften, lila Verläufe auf Weiß, weiche Schatten, übergroße runde Ecken, eine Ästhetik, die „schreit, dass eine KI das gemacht hat“. Anthropic selbst führt das auf distributionelle Konvergenz zurück: Sichere Entscheidungen dominieren die Web-Trainingsdaten. Weitere gemeldete Probleme sind kaputte Mobile-Layouts und Anweisungen, die in die UI-Texte durchsickern."}, {"kind": "steps", "items": [{"label": "Installiere die Frontend-Design-skill", "body": "Sie zwingt Claude, sich auf eine echte Richtung festzulegen, und vermeidet ausdrücklich von KI überstrapazierte Schriften und Verläufe."}, {"label": "Aktiviere Browser-Verifizierung", "body": "Lass Claude über Breakpoints hinweg rendern und sich selbst prüfen, damit Layouts nicht stillschweigend auf Mobilgeräten brechen."}, {"label": "Liefere tokens und Referenzen", "body": "Echte Design-tokens und Referenz-Screenshots sind der größte Einzelhebel für die Output-Qualität."}, {"label": "Hinterlege Regeln in CLAUDE.md", "body": "Schreibe Regeln im Stil „keine Hero-Cards, höchstens zwei Schriftarten, markenorientierte Hierarchie“ dorthin, wo der Agent sie bei jedem Durchlauf liest."}]}, {"kind": "p", "text": "Beachte: Jede dieser Maßnahmen dreht sich darum, dem Agenten einen kuratierten Design-Kontext zu geben. Diesen Kontext von Hand und pro Projekt zu pflegen, ist genau die Mühsal, die Open Design beseitigt."}]}, {"id": "open-design", "heading": "Mit Claude Code in Open Design gestalten", "blocks": [{"kind": "p", "text": "Open Design ist die quelloffene Design-Schicht, nach der der obige Workflow immer wieder verlangt. Es behandelt Claude Code als First-Party-Adapter und umgibt ihn mit einer kuratierten skill- und Designsystem-Bibliothek, einer strukturierten Render-Pipeline und einer lokalen Desktop-UI — sodass der Design-Kontext, der Claude Code gut macht, vom ersten Durchlauf an da ist, statt jedes Mal von Hand zusammengebaut zu werden."}, {"kind": "ol", "items": ["Installiere Open Design und wähle Claude Code als deinen Agenten.", "Authentifiziere dich mit deinem Anthropic-API-Key (BYOK) oder Claude-Abo — die Zugangsdaten bleiben auf deiner Maschine und werden niemals über uns geleitet.", "Wähle ein Designsystem und eine skill und erzeuge dann Decks, Prototypen und Landingpages mit konsistentem Geschmack.", "Jedes Artefakt und jede DESIGN.md-Datei liegt in deinem eigenen Repo, nicht in einer gehosteten Cloud."]}, {"kind": "p", "text": "Derselbe Claude-Code-Agent, derselbe Key — plus ein echter, portabler, quelloffener Design-Workflow drumherum. Es ist local-first und Apache-2.0, sodass nichts an deiner Arbeit oder deinen Zugangsdaten deine Maschine verlässt."}]}], "faqTitle": "Häufig gestellte Fragen", "faq": [{"name": "Eignet sich Claude Code für Designarbeit?", "text": "Ja — er gilt weithin als der Coding-Agent mit dem besten Frontend-Geschmack und trifft konkrete, codebasis-bewusste Entscheidungen über hex-Werte, Abstände und Schriftskalen. Mit der Frontend-Design-skill, einem Designsystem und echten Referenzbildern im Kontext liefert er produktionsreife, responsive UI und kann sie in einem Browser verifizieren. Ohne diesen Kontext fällt er tendenziell auf einen generischen Look zurück — und genau diese Lücke schließt Open Design."}, {"name": "Brauche ich ein Claude-Abo, um mit Claude Code zu gestalten?", "text": "Du kannst entweder einen Anthropic-API-Key (BYOK, über die Console) oder ein Claude-Abo (Pro / Max) verwenden. So oder so leitet Open Design deine Zugangsdaten niemals weiter — sie werden direkt von deinem Agenten auf deiner Maschine genutzt."}, {"name": "Claude Code oder Codex für Frontend-Design?", "text": "Beide sind stark. Claude Code ist bekannt für konkrete, codebasis-bewusste Designentscheidungen und Frontend-Argumentation; Codex hat starken visuellen Feinschliff und glänzt bei delegierten, sandboxed Builds. Viele Teams nutzen beide — Open Design lässt dich die Agenten wechseln, ohne deinen Design-Workflow zu ändern."}, {"name": "Wie verbinde ich Claude Code mit Figma?", "text": "Installiere das offizielle Figma-Plugin mit claude plugin install figma@claude-plugins-official. Du kannst dann Figma-Frames mithilfe des Design-Kontexts in Code umsetzen und eine laufende UI mit „Send this to Figma“ zurück in bearbeitbare Figma-Frames schieben. Dev Mode MCP erfordert einen kostenpflichtigen Figma-Plan."}, {"name": "Was sind Skills und CLAUDE.md?", "text": "CLAUDE.md ist eine Markdown-Datei im Projektstamm, die Claude Code zu Beginn jeder Session liest — der Ort, um deine Design-Konventionen zu hinterlegen. Skills bündeln wiederverwendbare Anweisungen und Ressourcen, die Claude bei Bedarf lädt, darunter Anthropics offizielle Frontend-Design-skill. Open Design liefert eine kuratierte Bibliothek von beidem, sodass du das Setup pro Projekt überspringst."}, {"name": "Wie vermeide ich die generische „AI-Slop“-Ästhetik?", "text": "Installiere die Frontend-Design-skill, liefere echte Design-tokens und Referenz-Screenshots, hinterlege Markenregeln in CLAUDE.md und aktiviere Browser-Verifizierung. Open Design liefert diese als kuratierte Bibliothek aus, sodass du das Setup pro Projekt überspringst."}, {"name": "Ist Open Design mit Anthropic verbunden?", "text": "Nein. Claude Code ist ein Produkt von Anthropic; Open Design ist ein unabhängiges quelloffenes Projekt, das ihn als First-Party-Adapter unterstützt. Claude und Claude Code sind Marken von Anthropic."}, {"name": "Sind meine Dateien und Zugangsdaten sicher?", "text": "Ja — Open Design ist local-first und Apache-2.0. Deine Dateien, Artefakte und DESIGN.md bleiben in deinem eigenen Repo, und deine Anthropic-Zugangsdaten werden direkt von deinem Agenten genutzt, niemals über Open-Design-Server geleitet."}], "ctaTitle": "Gestalte mit Claude Code, auf die offene Art.", "ctaBody": "Bring deinen eigenen Anthropic-Key oder dein Claude-Abo mit, behalte jede Datei lokal und erhalte eine kuratierte Design-Bibliothek rund um den Agenten, den du ohnehin schon nutzt.", "ctaActions": [{"label": "Claude Code in Open Design verwenden", "href": "/quickstart/", "variant": "primary"}, {"label": "Auf GitHub mit Stern markieren", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Desktop-App herunterladen", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Alle unterstützten Agenten ansehen"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex für Design — Open Design", + description: "Wie Menschen OpenAI Codex für UI- und Webdesign nutzen — das Product-Design-Plugin, die Figma-Integration, Frontend-skills — und wie Open Design Codex zu einem local-first, quelloffenen Design-Agenten macht.", + breadcrumb: "Codex", + label: "Agent · Codex", + heading: "Codex für Design.", + lead: "Codex ist der Coding-Agent von OpenAI. Mit seinem Product-Design-Plugin und der Figma-Integration ist es zu einem ernstzunehmenden Design-Tool geworden. Open Design bindet Codex in einen quelloffenen Design-Workflow ein — dein OpenAI-Key oder ChatGPT-Abo, deine Dateien, local-first.", + rich: {"heroCtaLead": "Open Design macht Codex zu einem local-first, quelloffenen Design-Agenten — dein OpenAI-Key, deine Dateien, dazu eine kuratierte skill- und Designsystem-Bibliothek drumherum.", "heroCtaActions": [{"label": "Codex in Open Design verwenden", "href": "/quickstart/", "variant": "primary"}, {"label": "Auf GitHub mit Stern markieren", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Desktop-App herunterladen", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex begann als Code-Generator, wurde 2026 aber zu einem glaubwürdigen Werkzeug, um echte Interfaces zu gestalten — sobald du ihm die richtigen Referenzen, skills und eine Verifizierungsschleife gibst. Dies ist ein praktischer End-to-End-Leitfaden, wie du Codex für UI-, Frontend- und Designsystem-Arbeit einsetzt und ihn mit Open Design in einen strukturierten Design-Workflow einbindest.", "Er behandelt, was Codex heute ist, warum es plötzlich gut im Frontend ist, wie du es von null aufsetzt, die Screenshot-zu-UI-Schleife, den offiziellen Figma-Roundtrip, wie es im Vergleich zu Cursor und Claude Code abschneidet, die Fallstricke, die KI-Output generisch wirken lassen, und wie Open Design die Lücke als offene, local-first Design-Schicht schließt."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Codex-Design-Feedbackschleife: Terminal-Agent, Browser, der die UI rendert, und ein Workspace, mit einem zurückführenden Feedback-Pfeil", "caption": "Die Kernschleife: Codex baut UI im Terminal, rendert und verifiziert sie in einem echten Browser und iteriert gegen deine Referenzen."}, "tocLabel": "Auf dieser Seite", "toc": [{"id": "what-is-codex", "label": "Was OpenAI Codex wirklich ist"}, {"id": "why-design", "label": "Warum Codex jetzt gut im Design ist"}, {"id": "setup", "label": "Codex für Design einrichten (von null)"}, {"id": "screenshot-workflow", "label": "Der Screenshot-zu-UI-Workflow"}, {"id": "figma", "label": "Codex + Figma-Roundtrip"}, {"id": "vs", "label": "Codex vs. Cursor vs. Claude Code"}, {"id": "pitfalls", "label": "Fallstricke und der „AI-Slop“-Look"}, {"id": "open-design", "label": "Mit Codex in Open Design gestalten"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-codex", "heading": "Was OpenAI Codex wirklich ist (und was nicht)", "blocks": [{"kind": "p", "text": "Zuerst eine Begriffsklärung, über die fast jeder stolpert, der nach „Codex“ sucht. Das ursprüngliche OpenAI Codex war ein Code-Vervollständigungsmodell von 2021, das den frühen GitHub Copilot antrieb und 2023 eingestellt wurde. Darum geht es auf dieser Seite nicht. Das heutige Codex ist OpenAIs agentisches Coding-Tool — es plant, schreibt, führt aus und verifiziert Code aus Aufgaben in natürlicher Sprache."}, {"kind": "p", "text": "Das moderne Codex ist über vier Oberflächen verfügbar: eine Terminal-CLI (in Rust neu geschrieben, Apache-2.0-lizenziert), eine IDE-Erweiterung für VS Code, Cursor und Windsurf, eine Cloud-/Web-Oberfläche für delegierte asynchrone Aufgaben und eine Desktop-App mit eingebautem Browser und Computer Use."}, {"kind": "steps", "items": [{"label": "Standardmodell", "body": "Stand Mitte 2026 ist das empfohlene Modell gpt-5.5, wobei gpt-5.4 das Modell ist, das OpenAI ausdrücklich für Frontend und Computer Use trainiert hat."}, {"label": "Anweisungsdatei", "body": "Codex liest eine AGENTS.md-Datei in deinem Projekt (ein toolübergreifender Standard) für Projektregeln — der natürliche Ort, um deine Design-Konventionen zu hinterlegen."}, {"label": "Sandbox", "body": "Es läuft in einer Sandbox auf Kernel-Ebene (standardmäßig workspace-write), sodass ein Agent, der deine UI bearbeitet, nicht aus dem Projekt ausbrechen kann."}]}, {"kind": "ul", "items": ["Anbieter: OpenAI", "Zugangsdaten: OpenAI-API-Key (BYOK) oder ChatGPT-Abo (Free / Go / Plus / Pro / Business / Enterprise)", "Lizenz der CLI: Apache-2.0, quelloffen"]}]}, {"id": "why-design", "heading": "Warum Codex jetzt gut im Design ist", "blocks": [{"kind": "p", "text": "Anfang 2026 kamen drei Dinge zusammen, die Codex von einem generischen Code-Generator zu einem echten Design-Tool machten."}, {"kind": "steps", "items": [{"label": "Ein frontend-trainiertes Modell", "body": "OpenAI brachte GPT-5.4, sein erstes Mainline-Modell, das für Frontend und Computer Use trainiert wurde, mit deutlich besserem Bildverständnis über den gesamten Design-Workflow und stärkerer Selbstverifizierung. Es kann sogar Mood-Boards und visuelle Optionen erzeugen, bevor es sich auf finale Assets festlegt."}, {"label": "Eine offizielle Frontend-skill", "body": "Der openai/skills-Katalog liefert eine kuratierte frontend-skill aus, die echten Geschmack erzwingt: kartenlose Layouts, randvolle Heroes, markenorientierte Hierarchie, zurückhaltende Bewegung, höchstens zwei Schriftarten und eine Akzentfarbe — und Codex eine visuelle These schreiben lässt, bevor es baut."}, {"label": "Browser-Verifizierung", "body": "Mit der Playwright-skill öffnet Codex einen echten Browser, stellt auf Breakpoints um und gleicht seinen Output mit der Referenz ab, statt nur zu prüfen, ob der Build durchläuft."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Diagramm, das zeigt, wie Designsystem, skill und Referenzbild zu gutem Design-Output zusammenlaufen", "caption": "Geschmack entsteht aus drei Eingaben, die du lieferst: einem Designsystem, einer skill und echten Referenzbildern."}, {"kind": "p", "text": "Die Lektion hinter allen dreien: Codex hat standardmäßig keinen Geschmack. Es liefert gutes Design, wenn du ihm Vorgaben machst — ein Designsystem, eine ästhetische skill und konkrete Referenzen. Open Design bündelt genau diese Eingaben — deshalb passen die beiden zusammen (mehr dazu weiter unten)."}]}, {"id": "setup", "heading": "Codex für Designarbeit einrichten, von null", "blocks": [{"kind": "p", "text": "Hier ist der komplette Weg von einer frischen Maschine zu einem Codex, das UI bauen und verifizieren kann."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Fünfstufiger Einrichtungsablauf: installieren, authentifizieren, konfigurieren, skill installieren, verifizieren", "caption": "Die Einrichtungssequenz: installieren → authentifizieren → AGENTS.md konfigurieren → die frontend-skill installieren → Browser-Verifizierung aktivieren."}, {"kind": "steps", "items": [{"label": "Hinterlege deine Designregeln", "body": "Schreibe deine tokens, Primitive und Konventionen in AGENTS.md oder eine DESIGN.md und verweise Codex darauf, damit der Output zu einer Marke passt, statt zu einem generischen Look zurückzufallen."}, {"label": "Wähle die richtige Reasoning-Stufe", "body": "OpenAI weist darauf hin, dass niedrige bis mittlere Reasoning-Stufen oft stärkere Frontend-Ergebnisse liefern als die höchste Einstellung."}]}]}, {"id": "screenshot-workflow", "heading": "Der Screenshot-zu-UI-Workflow", "blocks": [{"kind": "p", "text": "Die wirkungsvollste Design-Schleife mit Codex besteht darin, ein Referenzbild in funktionierende, responsive UI zu verwandeln und zu iterieren, bis es passt. OpenAIs eigene Anleitung lässt sich auf fünf Schritte verdichten."}, {"kind": "ol", "items": ["Beginne mit den klarsten visuellen Referenzen, die du hast — und nimm mehrere Zustände auf (Desktop und Mobile, Hover, leer, ladend), nicht nur einen Hero-Shot.", "Sei im Prompt konkret; vage Prompts erzeugen generische UI.", "Bereite ein Designsystem vor und sag Codex, wo die tokens und kanonischen Primitive liegen.", "Aktiviere die interaktive Playwright-skill, damit Codex in einem echten Browser rendert und auf Breakpoints umstellt.", "Iteriere, indem du Codex seine Umsetzung mit den Screenshots abgleichen lässt — nicht bloß bestätigen, dass es baut."]}, {"kind": "p", "text": "Füttere Bilder, indem du einen Screenshot ins Terminal ziehst oder das Image-Flag nutzt, und prompte dann mit konkreten Vorgaben:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Lass einen Dev-Server in einem zweiten Terminal laufen, halte Prompts klein und fokussiert und committe gute Iterationen / verwirf schlechte (und teile Codex mit, wenn du zurücksetzt), damit jeder Durchlauf auf einer sauberen Basis aufbaut."}]}, {"id": "figma", "heading": "Codex + Figma: Design-↔-Code-Roundtrip", "blocks": [{"kind": "p", "text": "Im Februar 2026 kündigten OpenAI und Figma eine offizielle Partnerschaft an und machten aus der früheren Figma-MCP-Beta eine erstklassige, bidirektionale Integration. Sie funktioniert in beide Richtungen."}, {"kind": "steps", "items": [{"label": "Design → Code", "body": "Kopiere in Figma den „link to selection“ eines Frames, füge ihn mit get_design_context in Codex ein und bitte es, das Design mit deiner bestehenden Komponentenbibliothek umzusetzen."}, {"label": "Code → Design", "body": "Das Werkzeug generate_figma_design („Code to Canvas“) verwandelt eine laufende UI zurück in bearbeitbare Figma-Frames — den ganzen Screen, ein ausgewähltes Element oder eine ganze Datei."}]}, {"kind": "p", "text": "Der Figma-MCP läuft als Remote-Server und ist von Rate-Limits ausgenommen. Füge ihn einmal hinzu und er steht Codex, Claude Code, Cursor, VS Code und mehr zur Verfügung — genau die Art portabler, agentenübergreifender Fähigkeit, die Open Design orchestrieren soll."}]}, {"id": "vs", "heading": "Codex vs. Cursor vs. Claude Code für Design", "blocks": [{"kind": "p", "text": "Es gibt keinen einzelnen Gewinner für Designarbeit — jeder Agent hat eine andere Stärke, und erfahrene Teams kombinieren sie. Eine faire Zusammenfassung:"}, {"kind": "table", "columns": ["Agent", "Design-Stärke", "Am besten für"], "rows": [["Codex", "Starker visueller Feinschliff nach GPT-5.4 + frontend-skill; Bildverständnis", "Delegierte asynchrone Builds, sandboxed Läufe, portable AGENTS.md-Regeln"], ["Cursor", "Visuelle Build-and-See-Schleife mit Live-Vorschau und Inline-Edits", "Enge iterieren-und-beobachten-UI-Arbeit innerhalb einer IDE"], ["Claude Code", "Konkrete Designentscheidungen (hex, Abstände, Typografie) und codebasis-bewusstes UX", "Frontend-Argumentation und Refactorings mit großem Kontext"]]}, {"kind": "p", "text": "Das wiederkehrende Urteil der Community lautet, dass Geschmack von Menschen kommt: Alle drei tendieren ohne skills, Referenzen und Vorgaben zu einer generischen Ästhetik. Das ist das eigentliche Problem, das es zu lösen gilt — und es hat die Form eines Design-Tools, nicht die eines Modells."}]}, {"id": "pitfalls", "heading": "Fallstricke und wie du den „AI-Slop“-Look vermeidest", "blocks": [{"kind": "p", "text": "Die häufigste Klage über Codex-generiertes Design lautet, dass es generisch aussieht — weiche Verläufe, schwebende Panels, übergroße runde Ecken, dramatische Schatten, eine Inter-und-Lila-Stimmung, die „schreit, dass eine KI das gemacht hat“. Weitere gemeldete Probleme sind kaputte Mobile-Layouts, Anweisungen, die in die UI-Texte durchsickern, und schnell erreichte Nutzungslimits."}, {"kind": "steps", "items": [{"label": "Installiere eine Frontend-skill", "body": "Eine kuratierte ästhetische skill zwingt Codex, sich auf eine echte Richtung festzulegen, statt auf den Standard-Look."}, {"label": "Aktiviere Playwright-Verifizierung", "body": "Lass Codex über Breakpoints hinweg rendern und sich selbst prüfen, damit Layouts nicht stillschweigend auf Mobilgeräten brechen."}, {"label": "Liefere tokens und Referenzen", "body": "Echte Design-tokens und Referenz-Screenshots sind der größte Einzelhebel für die Output-Qualität."}, {"label": "Hinterlege Regeln in AGENTS.md", "body": "Schreibe Regeln im Stil „keine Hero-Cards, höchstens zwei Schriftarten, markenorientierte Hierarchie“ dorthin, wo der Agent sie bei jedem Durchlauf liest."}]}, {"kind": "p", "text": "Beachte: Jede dieser Maßnahmen dreht sich darum, dem Agenten einen kuratierten Design-Kontext zu geben. Diesen Kontext von Hand und pro Projekt zu pflegen, ist genau die Mühsal, die Open Design beseitigt."}]}, {"id": "open-design", "heading": "Mit Codex in Open Design gestalten", "blocks": [{"kind": "p", "text": "Open Design ist die quelloffene Design-Schicht, nach der der obige Workflow immer wieder verlangt. Es behandelt Codex als First-Party-Adapter und umgibt es mit einer kuratierten skill- und Designsystem-Bibliothek, einer strukturierten Render-Pipeline und einer lokalen Desktop-UI — sodass der Design-Kontext, der Codex gut macht, vom ersten Durchlauf an da ist, statt jedes Mal von Hand zusammengebaut zu werden."}, {"kind": "ol", "items": ["Installiere Open Design und wähle Codex als deinen Agenten.", "Authentifiziere dich mit deinem OpenAI-API-Key (BYOK) oder ChatGPT-Abo — die Zugangsdaten bleiben auf deiner Maschine und werden niemals über uns geleitet.", "Wähle ein Designsystem und eine skill und erzeuge dann Decks, Prototypen und Landingpages mit konsistentem Geschmack.", "Jedes Artefakt und jede DESIGN.md-Datei liegt in deinem eigenen Repo, nicht in einer gehosteten Cloud."]}, {"kind": "p", "text": "Derselbe Codex-Agent, derselbe Key — plus ein echter, portabler, quelloffener Design-Workflow drumherum. Es ist local-first und Apache-2.0, sodass nichts an deiner Arbeit oder deinen Zugangsdaten deine Maschine verlässt."}]}], "faqTitle": "Häufig gestellte Fragen", "faq": [{"name": "Kann OpenAI Codex wirklich Designarbeit leisten?", "text": "Ja — mit einer Frontend-skill, einem Designsystem und echten Referenzbildern im Kontext liefert Codex (besonders auf GPT-5.4) produktionsreife, responsive UI und kann sie in einem Browser verifizieren. Ohne diesen Kontext fällt es tendenziell auf einen generischen Look zurück — und genau diese Lücke schließt Open Design."}, {"name": "Ist das das OpenAI-Codex-Product-Design-Plugin?", "text": "Nein. Open Design ist ein unabhängiges quelloffenes Projekt, das Codex als Agenten integriert. Es ergänzt OpenAIs eigenes Tooling um eine local-first, offene skill- und Designsystem-Bibliothek."}, {"name": "Brauche ich ein ChatGPT-Abo, um mit Codex zu gestalten?", "text": "Du kannst entweder einen OpenAI-API-Key (BYOK) oder dein ChatGPT-Abo verwenden. Die Anmeldung über ChatGPT gewährt in der Regel großzügigere Limits; Open Design leitet deine Zugangsdaten in keinem Fall weiter."}, {"name": "Codex oder Claude Code für Frontend-Design?", "text": "Beide sind stark. Claude Code ist bekannt für konkrete, codebasis-bewusste Designentscheidungen; Codex hat nach GPT-5.4 starken visuellen Feinschliff und glänzt bei delegierten, sandboxed Builds. Viele Teams nutzen beide — Open Design lässt dich die Agenten wechseln, ohne deinen Design-Workflow zu ändern."}, {"name": "Wie verbinde ich Codex mit Figma?", "text": "Füge den offiziellen Figma-MCP-Server hinzu (codex mcp add figma --url https://mcp.figma.com/mcp). Du kannst dann Figma-Frames mit get_design_context in Code umsetzen und eine laufende UI mit generate_figma_design zurück in bearbeitbare Figma-Frames schieben."}, {"name": "Wie vermeide ich die generische „AI-Slop“-Ästhetik?", "text": "Installiere eine Frontend-skill, liefere echte Design-tokens und Referenz-Screenshots, hinterlege Markenregeln in AGENTS.md und aktiviere Playwright-Verifizierung. Open Design liefert diese als kuratierte Bibliothek aus, sodass du das Setup pro Projekt überspringst."}, {"name": "Ist Open Design mit OpenAI verbunden?", "text": "Nein. Codex ist ein Produkt von OpenAI; Open Design ist ein unabhängiges quelloffenes Projekt, das es als First-Party-Adapter unterstützt. OpenAI und Codex sind Marken von OpenAI."}, {"name": "Sind meine Dateien und Zugangsdaten sicher?", "text": "Ja — Open Design ist local-first. Deine Dateien, Artefakte und DESIGN.md bleiben in deinem eigenen Repo, und deine OpenAI-Zugangsdaten werden direkt von deinem Agenten genutzt, niemals über Open-Design-Server geleitet."}], "ctaTitle": "Gestalte mit Codex, auf die offene Art.", "ctaBody": "Bring deinen eigenen OpenAI-Key mit, behalte jede Datei lokal und erhalte eine kuratierte Design-Bibliothek rund um den Agenten, den du ohnehin schon nutzt.", "ctaActions": [{"label": "Codex in Open Design verwenden", "href": "/quickstart/", "variant": "primary"}, {"label": "Auf GitHub mit Stern markieren", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Desktop-App herunterladen", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Alle unterstützten Agenten ansehen"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor für Designer — Open Design", + description: "Wie Designer Cursor für UI- und Webdesign nutzen — Design Mode, Figma-zu-Code, der Figma-MCP — und wie Open Design Cursor zu einem local-first, quelloffenen Design-Agenten macht.", + breadcrumb: "Cursor", + label: "Agent · Cursor", + heading: "Cursor für Designer.", + lead: "Cursor ist der KI-Code-Editor, jetzt mit einem visuellen Design Mode. Designer nutzen ihn, um UI durch Zeigen und Zeichnen zu bearbeiten und Figma in Code zu verwandeln. Open Design bindet den Cursor Agent in einen quelloffenen Design-Workflow ein, der deine Dateien lokal hält.", + rich: {"heroCtaLead": "Open Design macht Cursor zu einem local-first, quelloffenen Design-Agenten — dein Cursor-Account oder deine Modell-Keys, deine Dateien, dazu eine kuratierte skill- und Designsystem-Bibliothek drumherum.", "heroCtaActions": [{"label": "Cursor in Open Design verwenden", "href": "/quickstart/", "variant": "primary"}, {"label": "Auf GitHub mit Stern markieren", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Desktop-App herunterladen", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor ist der KI-First-Code-Editor, der „bauen und beim Rendern zusehen“ zur Standardmethode gemacht hat, UI auszuliefern. Mit dem Agent-Modus, Inline-Edits, einer In-Editor-Vorschau und Figma über MCP ist er zu einem echten Design-Tool geworden — sobald du ihm die richtigen Referenzen, Regeln und eine Verifizierungsschleife gibst. Dies ist ein praktischer End-to-End-Leitfaden, wie du Cursor für UI-, Frontend- und Designsystem-Arbeit einsetzt und ihn mit Open Design in einen strukturierten Design-Workflow einbindest.", "Er behandelt, was Cursor wirklich ist, warum seine enge iterieren-und-beobachten-Schleife gut für Design ist, wie du ihn von null aufsetzt, die Screenshot-und-Vorschau-zu-UI-Schleife, den Figma-Roundtrip über MCP, wie er im Vergleich zu Codex und Claude Code abschneidet, die Fallstricke, die KI-Output generisch wirken lassen, und wie Open Design die Lücke als offene, local-first Design-Schicht schließt."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Cursor-Design-Konvergenz: Editor links, ein kuratierter skill- und Designsystem-Hub in der Mitte mit dem Cursor-Zeichen im Zentrum und eine gerenderte UI rechts", "caption": "Die Kernidee: Cursor bearbeitet und rendert UI im Editor, während ein kuratierter Design-Hub ihn mit dem System, den skills und den Referenzen versorgt, die den Output absichtlich wirken lassen."}, "tocLabel": "Auf dieser Seite", "toc": [{"id": "what-is-cursor", "label": "Was Cursor wirklich ist"}, {"id": "why-design", "label": "Warum Cursor gut im Design ist"}, {"id": "setup", "label": "Cursor für Design einrichten (von null)"}, {"id": "preview-workflow", "label": "Der Vorschau-zu-UI-Workflow"}, {"id": "figma", "label": "Cursor + Figma über MCP"}, {"id": "vs", "label": "Cursor vs. Codex vs. Claude Code"}, {"id": "pitfalls", "label": "Fallstricke und der „AI-Slop“-Look"}, {"id": "open-design", "label": "Mit Cursor in Open Design gestalten"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-cursor", "heading": "Was Cursor wirklich ist", "blocks": [{"kind": "p", "text": "Cursor ist ein KI-First-Code-Editor von Anysphere. Es ist ein Fork von VS Code, behält also den vertrauten Editor, die Erweiterungen und Tastenkürzel, baut den Workflow aber rund um einen KI-Agenten neu auf, der dein gesamtes Projekt lesen, mehrere Dateien bearbeiten, Befehle ausführen und mit dir in der Schleife iterieren kann."}, {"kind": "p", "text": "Für Designarbeit sind die wichtigen Oberflächen der Agent-Modus (du beschreibst ein Ergebnis und Cursor plant und bearbeitet dateiübergreifend), Inline-Edits und Tab-Vervollständigungen für schnelle Anpassungen, eine In-Editor-Vorschau / ein Browser, sodass du die laufende UI siehst, ohne das Fenster zu verlassen, und MCP-Unterstützung, mit der er externen Kontext wie eine Live-Figma-Datei einbinden kann."}, {"kind": "steps", "items": [{"label": "Projektregeln", "body": "Cursor liest Projekt-Anweisungsdateien — versionierte `.mdc`-Regeln unter `.cursor/rules` und eine schlichte `AGENTS.md` — sodass du deine Design-Konventionen dort hinterlegen kannst, wo der Agent sie bei jedem Durchlauf liest."}, {"label": "Modelle", "body": "Cursor ist modell-flexibel: Es kommt mit Frontier-Modellen über dein Abo und unterstützt zudem das Mitbringen eigener Modell-Keys, sodass du die Engine hinter demselben Editor-Workflow wählst."}, {"label": "MCP", "body": "Es spricht das Model Context Protocol, sodass externe Server — am relevantesten der Figma-MCP-Server — zu erstklassigem Kontext für den Agenten werden."}]}, {"kind": "ul", "items": ["Anbieter: Anysphere", "Zugangsdaten: Cursor-Account / -Abo (Hobby / Pro / Business) oder deine eigenen Modell-Keys (BYOK)", "Form: KI-First-Code-Editor (VS-Code-Fork) mit einem In-Editor-Agenten und Vorschau"]}]}, {"id": "why-design", "heading": "Warum Cursor gut im Design ist", "blocks": [{"kind": "p", "text": "Cursors Design-Vorteil ist kein einzelnes Feature — es ist die Enge der Build-and-See-Schleife. Drei Dinge lassen ihn eher wie ein Design-Tool als wie einen generischen Code-Generator wirken."}, {"kind": "steps", "items": [{"label": "Eine enge iterieren-und-beobachten-Schleife", "body": "Du promptest, Cursor bearbeitet dateiübergreifend und die In-Editor-Vorschau rendert das Ergebnis sofort — sodass du Abstände, Hierarchie und Bewegung in Sekunden anpasst, statt über ein separates Terminal und einen Browser hin- und herzuwechseln."}, {"label": "Direktes visuelles Bearbeiten", "body": "Über den Chat hinaus lässt dich Cursor Elemente in der Vorschau auswählen und Stile anstupsen, sodass kleine visuelle Korrekturen sich wie Design-Edits anfühlen statt wie Code-Archäologie."}, {"label": "Projektregeln und MCP-Kontext", "body": "Mit `.cursor/rules` (oder `AGENTS.md`) und dem Figma-MCP-Server arbeitet der Agent gegen deine tokens, Komponenten und echten Design-Spezifikationen, statt zu raten."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Diagramm, das zeigt, wie Designsystem, skill und Referenzbild zu gutem Design-Output zusammenlaufen", "caption": "Geschmack entsteht aus drei Eingaben, die du lieferst: einem Designsystem, einer skill und echten Referenzbildern."}, {"kind": "p", "text": "Die Lektion ist dieselbe, die jeder Agent lehrt: Cursor hat standardmäßig keinen Geschmack. Es liefert gutes Design, wenn du ihm Vorgaben machst — ein Designsystem, eine ästhetische skill und konkrete Referenzen. Open Design bündelt genau diese Eingaben — deshalb passen die beiden zusammen (mehr dazu weiter unten)."}]}, {"id": "setup", "heading": "Cursor für Designarbeit einrichten, von null", "blocks": [{"kind": "p", "text": "Hier ist der komplette Weg von einer frischen Maschine zu einem Cursor, der UI gegen dein Designsystem bauen, in der Vorschau ansehen und verifizieren kann."}, {"kind": "ol", "items": ["Installiere Cursor von cursor.com und melde dich mit deinem Cursor-Account an oder konfiguriere deine eigenen Modell-Keys (BYOK) in den Einstellungen.", "Öffne dein Projekt und wähle ein Modell im Chat- / Agent-Panel.", "Füge Projektregeln hinzu: Erstelle `.cursor/rules/*.mdc` für strukturierte, glob-bezogene Konventionen oder eine schlichte `AGENTS.md` für einfache, lesbare Anweisungen.", "Verbinde den Figma-MCP-Server (optional), damit der Agent Live-Design-Kontext lesen kann.", "Starte deinen Dev-Server und nutze die In-Editor-Vorschau, um die UI zu sehen und zu verifizieren, während du iterierst."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Fünfstufiger Einrichtungsablauf: installieren, authentifizieren, Regeln konfigurieren, skill hinzufügen, verifizieren", "caption": "Die Einrichtungssequenz: installieren → authentifizieren → Projektregeln konfigurieren → eine skill hinzufügen → Vorschau-Verifizierung aktivieren."}, {"kind": "p", "text": "Eine minimale Projektregel-Datei sorgt dafür, dass der Agent für eine Marke gestaltet, statt auf einen generischen Look zurückzufallen. Lege sie dorthin, wo Cursor sie bei jedem Durchlauf liest:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Hinterlege deine Designregeln", "body": "Schreibe deine tokens, Primitive und Konventionen in `.cursor/rules` oder `AGENTS.md` und verweise Cursor darauf, damit der Output zu einer Marke passt, statt zu einem generischen Look zurückzufallen."}, {"label": "Halte Prompts klein", "body": "Cursors enge Schleife belohnt fokussierte Anfragen — iteriere eine Komponente oder einen Zustand nach dem anderen und beobachte die Vorschau zwischen den Durchläufen."}]}]}, {"id": "preview-workflow", "heading": "Der Vorschau-zu-UI-Workflow", "blocks": [{"kind": "p", "text": "Die wirkungsvollste Design-Schleife mit Cursor besteht darin, eine Referenz in funktionierende, responsive UI zu verwandeln und im Editor zu iterieren, bis sie passt — und dabei die ganze Zeit die Live-Vorschau zu beobachten, statt zu raten."}, {"kind": "ol", "items": ["Beginne mit den klarsten visuellen Referenzen, die du hast — und nimm mehrere Zustände auf (Desktop und Mobile, Hover, leer, ladend), nicht nur einen Hero-Shot.", "Sei im Prompt konkret; vage Prompts erzeugen generische UI.", "Bereite ein Designsystem vor und sag Cursor, wo die tokens und kanonischen Primitive liegen.", "Halte die In-Editor-Vorschau offen und deinen Dev-Server am Laufen, damit jede Bearbeitung sofort an den Breakpoints rendert, die dir wichtig sind.", "Iteriere, indem du die gerenderte UI mit den Referenzen abgleichst — und nutze direkte Elementauswahl in der Vorschau für kleine visuelle Korrekturen."]}, {"kind": "p", "text": "Füttere Referenzen, indem du ein Bild an den Chat anhängst, und prompte dann mit konkreten Vorgaben:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Committe gute Iterationen und verwirf schlechte (und teile Cursor mit, wenn du zurücksetzt), damit jeder Durchlauf auf einer sauberen Basis aufbaut — dieselbe Disziplin, die jede Agenten-Schleife vor dem Abdriften bewahrt."}]}, {"id": "figma", "heading": "Cursor + Figma: Design ↔ Code über MCP", "blocks": [{"kind": "p", "text": "Cursor verbindet sich über den offiziellen Figma-MCP-Server mit Figma, der dem Agenten strukturierten Zugriff auf eine Live-Figma-Datei gibt statt auf einen flachen Screenshot. Das nimmt das Rätselraten aus der Übergabe."}, {"kind": "steps", "items": [{"label": "Design → Code", "body": "Kopiere in Figma den Link eines Frames, füge ihn in Cursor ein und bitte es, das Design umzusetzen. Der MCP-Server legt echten Design-Kontext offen — Komponenten, Variablen, Layout-Daten, tokens —, sodass der erzeugte Code zur Quelle passt, statt sie nur anzunähern."}, {"label": "Konsistent bleiben", "body": "Wenn Design-tokens, Stile und Komponenten in Figma konsistent verwendet werden (und Code Connect, wo verfügbar), bleibt Cursors Output auf dein echtes Designsystem abgebildet, statt Primitive neu zu erfinden."}]}, {"kind": "p", "text": "Richte den Remote-Figma-MCP-Server einmal ein und er steht Cursor als erstklassiger Kontext zur Verfügung. Weil MCP ein offener Standard ist, ist derselbe Server über Cursor, Claude Code, Codex und VS Code hinweg wiederverwendbar — genau die Art portabler, agentenübergreifender Fähigkeit, die Open Design orchestrieren soll."}]}, {"id": "vs", "heading": "Cursor vs. Codex vs. Claude Code für Design", "blocks": [{"kind": "p", "text": "Es gibt keinen einzelnen Gewinner für Designarbeit — jeder Agent hat eine andere Stärke, und erfahrene Teams kombinieren sie. Eine faire Zusammenfassung:"}, {"kind": "table", "columns": ["Agent", "Design-Stärke", "Am besten für"], "rows": [["Cursor", "Visuelle Build-and-See-Schleife mit Live-In-Editor-Vorschau und direktem Bearbeiten von Elementen", "Enge iterieren-und-beobachten-UI-Arbeit innerhalb einer IDE"], ["Codex", "Starker visueller Feinschliff mit einer frontend-skill; Bildverständnis und sandboxed Läufe", "Delegierte asynchrone Builds und portable AGENTS.md-Regeln"], ["Claude Code", "Konkrete Designentscheidungen (hex, Abstände, Typografie) und codebasis-bewusstes UX", "Frontend-Argumentation und Refactorings mit großem Kontext"]]}, {"kind": "p", "text": "Das wiederkehrende Urteil der Community lautet, dass Geschmack von Menschen kommt: Alle drei tendieren ohne skills, Referenzen und Vorgaben zu einer generischen Ästhetik. Das ist das eigentliche Problem, das es zu lösen gilt — und es hat die Form eines Design-Tools, nicht die eines Modells."}]}, {"id": "pitfalls", "heading": "Fallstricke und wie du den „AI-Slop“-Look vermeidest", "blocks": [{"kind": "p", "text": "Die häufigste Klage über Cursor-generiertes Design lautet, dass es generisch aussieht — weiche Verläufe, schwebende Panels, übergroße runde Ecken, dramatische Schatten, eine Inter-und-Lila-Stimmung, die „schreit, dass eine KI das gemacht hat“. Weitere gemeldete Probleme sind Layouts, die auf Mobilgeräten brechen, und Anweisungen, die in die UI-Texte durchsickern."}, {"kind": "steps", "items": [{"label": "Füge eine Design-skill hinzu", "body": "Eine kuratierte ästhetische skill zwingt Cursor, sich auf eine echte Richtung festzulegen, statt auf den Standard-Look."}, {"label": "Nutze die Vorschau zum Verifizieren", "body": "Rendere und prüfe in der In-Editor-Vorschau über Breakpoints hinweg, damit Layouts nicht stillschweigend auf Mobilgeräten brechen."}, {"label": "Liefere tokens und Referenzen", "body": "Echte Design-tokens und Referenz-Screenshots sind der größte Einzelhebel für die Output-Qualität."}, {"label": "Hinterlege Regeln in `.cursor/rules`", "body": "Schreibe Regeln im Stil „keine Hero-Cards, höchstens zwei Schriftarten, markenorientierte Hierarchie“ dorthin, wo der Agent sie bei jedem Durchlauf liest."}]}, {"kind": "p", "text": "Beachte: Jede dieser Maßnahmen dreht sich darum, dem Agenten einen kuratierten Design-Kontext zu geben. Diesen Kontext von Hand und pro Projekt zu pflegen, ist genau die Mühsal, die Open Design beseitigt."}]}, {"id": "open-design", "heading": "Mit Cursor in Open Design gestalten", "blocks": [{"kind": "p", "text": "Open Design ist die quelloffene Design-Schicht, nach der der obige Workflow immer wieder verlangt. Es behandelt Cursor als First-Party-Adapter und umgibt ihn mit einer kuratierten skill- und Designsystem-Bibliothek, einer strukturierten Render-Pipeline und einer lokalen Desktop-UI — sodass der Design-Kontext, der Cursor gut macht, vom ersten Durchlauf an da ist, statt jedes Mal von Hand zusammengebaut zu werden."}, {"kind": "ol", "items": ["Installiere Open Design und wähle Cursor als deinen Agenten.", "Authentifiziere dich mit deinem Cursor-Account oder deinen eigenen Modell-Keys (BYOK) — die Zugangsdaten bleiben auf deiner Maschine und werden niemals über uns geleitet.", "Wähle ein Designsystem und eine skill und erzeuge dann Decks, Prototypen und Landingpages mit konsistentem Geschmack.", "Jedes Artefakt und jede DESIGN.md-Datei liegt in deinem eigenen Repo, nicht in einer gehosteten Cloud."]}, {"kind": "p", "text": "Derselbe Cursor-Agent, derselbe Key — plus ein echter, portabler, quelloffener Design-Workflow drumherum. Es ist local-first und Apache-2.0, sodass nichts an deiner Arbeit oder deinen Zugangsdaten deine Maschine verlässt."}]}], "faqTitle": "Häufig gestellte Fragen", "faq": [{"name": "Kann Cursor wirklich Designarbeit leisten?", "text": "Ja — mit einer Design-skill, einem Designsystem und echten Referenzbildern im Kontext liefert Cursor produktionsreife, responsive UI, und seine In-Editor-Vorschau lässt dich sie visuell verifizieren und verfeinern. Ohne diesen Kontext fällt es tendenziell auf einen generischen Look zurück — und genau diese Lücke schließt Open Design."}, {"name": "Ist das ein offizielles Cursor-Produkt?", "text": "Nein. Open Design ist ein unabhängiges quelloffenes Projekt, das Cursor als Agenten integriert. Es ergänzt Cursor um eine local-first, offene skill- und Designsystem-Bibliothek."}, {"name": "Brauche ich ein Cursor-Abo, um mit Cursor zu gestalten?", "text": "Du kannst einen Cursor-Account / ein -Abo nutzen oder deine eigenen Modell-Keys (BYOK) mitbringen. Open Design leitet deine Zugangsdaten in keinem Fall weiter — sie werden direkt von deinem Agenten genutzt."}, {"name": "Cursor oder Claude Code für Frontend-Design?", "text": "Beide sind stark. Claude Code ist bekannt für konkrete, codebasis-bewusste Designentscheidungen; Cursors Vorteil ist seine enge Build-and-See-Schleife mit einer Live-Vorschau im Editor. Viele Teams nutzen beide — Open Design lässt dich die Agenten wechseln, ohne deinen Design-Workflow zu ändern."}, {"name": "Wie verbinde ich Cursor mit Figma?", "text": "Füge den offiziellen Figma-MCP-Server in Cursor hinzu, füge dann einen Figma-Frame-Link in den Chat ein und bitte Cursor, ihn umzusetzen. Der Server legt echte Komponenten, Variablen und Layout-Daten offen, sodass der erzeugte Code zum Quelldesign passt."}, {"name": "Wie vermeide ich die generische „AI-Slop“-Ästhetik?", "text": "Füge eine Design-skill hinzu, liefere echte Design-tokens und Referenz-Screenshots, hinterlege Markenregeln in `.cursor/rules` oder `AGENTS.md` und verifiziere in der Vorschau über Breakpoints hinweg. Open Design liefert diese als kuratierte Bibliothek aus, sodass du das Setup pro Projekt überspringst."}, {"name": "Ist Open Design mit Cursor oder Anysphere verbunden?", "text": "Nein. Cursor ist ein Produkt von Anysphere; Open Design ist ein unabhängiges quelloffenes Projekt, das es als First-Party-Adapter unterstützt. Cursor und Anysphere sind Marken von Anysphere, Inc."}, {"name": "Sind meine Dateien und Zugangsdaten sicher?", "text": "Ja — Open Design ist local-first. Deine Dateien, Artefakte und DESIGN.md bleiben in deinem eigenen Repo, und deine Cursor- oder Modell-Zugangsdaten werden direkt von deinem Agenten genutzt, niemals über Open-Design-Server geleitet."}], "ctaTitle": "Gestalte mit Cursor, auf die offene Art.", "ctaBody": "Bring deinen eigenen Cursor-Account oder deine Modell-Keys mit, behalte jede Datei lokal und erhalte eine kuratierte Design-Bibliothek rund um den Agenten, den du ohnehin schon nutzt.", "ctaActions": [{"label": "Cursor in Open Design verwenden", "href": "/quickstart/", "variant": "primary"}, {"label": "Auf GitHub mit Stern markieren", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Desktop-App herunterladen", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Alle unterstützten Agenten ansehen"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode für Design — Open Design", + description: "Wie Menschen OpenCode für UI- und Webdesign nutzen — design.md-Dateien, UI/UX-skills, Figma-MCP — und wie Open Design OpenCode zu einem local-first, quelloffenen Design-Agenten macht.", + breadcrumb: "OpenCode", + label: "Agent · OpenCode", + heading: "OpenCode für Design.", + lead: "OpenCode ist der quelloffene KI-Coding-Agent für das Terminal. Designer schrauben Design-skills und DESIGN.md-Dateien daran, um echte UI zu erzeugen. Open Design macht daraus einen strukturierten, quelloffenen Workflow — bring deine Provider-Keys mit und behalte alles lokal.", + rich: {"heroCtaLead": "Open Design macht OpenCode zu einem local-first, quelloffenen Design-Agenten — jedes Modell, das du wählst, mit deinem eigenen Provider-Key, deine Dateien, dazu eine kuratierte skill- und Designsystem-Bibliothek drumherum.", "heroCtaActions": [{"label": "OpenCode in Open Design verwenden", "href": "/quickstart/", "variant": "primary"}, {"label": "Auf GitHub mit Stern markieren", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Desktop-App herunterladen", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode ist ein quelloffener, terminal-first KI-Coding-Agent, der bewusst modell-agnostisch ist: Du bringst deinen eigenen Provider-Key mit und lässt hinter demselben Workflow jedes beliebige Modell laufen. Diese Offenheit macht ihn zu einer natürlichen Basis für Designarbeit — doch wie jeder Agent liefert er nur dann gute UI, wenn du ihm die richtigen Referenzen, skills und eine Verifizierungsschleife gibst. Dies ist ein praktischer End-to-End-Leitfaden, wie du OpenCode für UI-, Frontend- und Designsystem-Arbeit einsetzt und ihn mit Open Design in einen strukturierten Design-Workflow einbindest.", "Er behandelt, was OpenCode wirklich ist, warum ein modell-agnostischer offener Agent gut zu Design passt, wie du ihn von null aufsetzt, die Screenshot-zu-UI-Schleife, wie AGENTS.md und MCP ihn erweitern, wie er im Vergleich zu Codex, Claude Code und Cursor abschneidet, die Fallstricke, die KI-Output generisch wirken lassen, und wie Open Design die Lücke als offene, local-first Design-Schicht schließt — eine natürliche Paarung, da beide Projekte quelloffen sind und auf deiner eigenen Maschine laufen."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "OpenCode-Design-Feedbackschleife: ein Terminal-TUI-Agent, ein Browser, der die UI rendert, und ein Workspace, mit einem zurückführenden Feedback-Pfeil", "caption": "Die Kernschleife: OpenCode baut UI im Terminal, rendert und verifiziert sie in einem echten Browser und iteriert gegen deine Referenzen — auf welchem Modell auch immer du wählst."}, "tocLabel": "Auf dieser Seite", "toc": [{"id": "what-is-opencode", "label": "Was OpenCode wirklich ist"}, {"id": "why-design", "label": "Warum ein offener Any-Model-Agent zu Design passt"}, {"id": "setup", "label": "OpenCode für Design einrichten (von null)"}, {"id": "screenshot-workflow", "label": "Der Screenshot-zu-UI-Workflow"}, {"id": "extend", "label": "AGENTS.md, MCP und teilbare Sessions"}, {"id": "vs", "label": "OpenCode vs. Codex vs. Claude Code vs. Cursor"}, {"id": "pitfalls", "label": "Fallstricke und der „AI-Slop“-Look"}, {"id": "open-design", "label": "Mit OpenCode in Open Design gestalten"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-opencode", "heading": "Was OpenCode wirklich ist", "blocks": [{"kind": "p", "text": "OpenCode ist ein quelloffener KI-Coding-Agent für das Terminal, gepflegt vom Team hinter SST (Anomaly Innovations). Es liest dein Repository, führt Befehle aus, bearbeitet Dateien und spricht mit einem großen Sprachmodell — doch anders als anbietergebundene Agenten liefert es kein eigenes Modell mit. Du richtest es auf den Provider und das Modell aus, das du willst, und bringst deinen eigenen Key mit."}, {"kind": "p", "text": "Es läuft als Terminal-UI (TUI), mit einer Desktop-App und IDE-Erweiterungen auf derselben Engine. Unter der Haube nutzt es eine Client-/Server-Architektur, sodass der Agent, der die Arbeit erledigt, von der Oberfläche entkoppelt ist, über die du ihn steuerst. Zwei eingebaute Agenten — build und plan — wechselst du mit der Tab-Taste."}, {"kind": "steps", "items": [{"label": "Modell-agnostisch", "body": "Modelle und Provider kommen aus models.dev, einem offenen Katalog. Du konfigurierst sie in opencode.json mit einem provider/model-id-String und kannst Provider deaktivieren, die du nicht geladen haben willst — sodass derselbe Design-Workflow auf Anthropic, OpenAI, Google, OpenRouter, lokalen Modellen und mehr läuft."}, {"label": "Anweisungsdatei", "body": "OpenCode liest eine AGENTS.md-Datei in deinem Projekt (den toolübergreifenden Standard, auch kompatibel mit CLAUDE.md) für Projektregeln — der natürliche Ort, um deine Design-Konventionen zu hinterlegen. Führe /init aus, um eine zu erzeugen."}, {"label": "Erweiterbar", "body": "Es unterstützt LSP-Integration, MCP-Server, Themes, Tastenkürzel und eigene Befehle sowie teilbare Session-Links zur Zusammenarbeit."}]}, {"kind": "ul", "items": ["Betreuer: SST / Anomaly Innovations (quelloffenes Projekt)", "Zugangsdaten: deine eigenen API-Keys der Modell-Provider — BYOK, kein Vendor-Lock-in", "Lizenz: MIT, quelloffen"]}]}, {"id": "why-design", "heading": "Warum ein offener Any-Model-Agent zu Designarbeit passt", "blocks": [{"kind": "p", "text": "OpenCode hat kein einzelnes „Design-Modell“ wie ein Anbieter-Agent — und das ist der Punkt. Weil es modell-agnostisch und offen ist, kannst du denselben Design-Workflow auf dem Modell laufen lassen, das gerade am besten im Frontend ist, es später tauschen oder auf ein lokales Modell zurückgreifen, alles ohne dein Setup zu ändern."}, {"kind": "p", "text": "Aber die Modellwahl allein erkauft keinen Geschmack. Wie jeder Coding-Agent erzeugt OpenCode generische UI, solange du ihm keine Vorgaben machst. Guter Design-Output entsteht aus drei Eingaben, die du lieferst."}, {"kind": "steps", "items": [{"label": "Ein Designsystem", "body": "Echte tokens, Primitive und Konventionen, die der Agent wiederverwendet, sodass der Output zu einer Marke passt, statt zu einem generischen Look zurückzufallen."}, {"label": "Eine ästhetische skill", "body": "Eine kuratierte skill, die echten Geschmack erzwingt — zurückhaltende Bewegung, markenorientierte Hierarchie, höchstens zwei Schriftarten und eine Akzentfarbe — und den Agenten dazu bringt, sich auf eine Richtung festzulegen, bevor er baut."}, {"label": "Konkrete Referenzen", "body": "Echte Referenzbilder und mehrere Zustände (Desktop und Mobile, Hover, leer, ladend), nicht ein einzelner Hero-Shot."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Diagramm, das zeigt, wie Designsystem, skill und Referenzbild zu gutem Design-Output zusammenlaufen", "caption": "Geschmack entsteht aus drei Eingaben, die du lieferst: einem Designsystem, einer skill und echten Referenzbildern — unabhängig davon, welches Modell du laufen lässt."}, {"kind": "p", "text": "Die Lektion: OpenCode gibt dir Modell-Freiheit, aber Geschmack entsteht weiterhin aus einem kuratierten Design-Kontext. Open Design bündelt genau diese Eingaben — deshalb passen die beiden zusammen: Beide sind quelloffen und local-first (mehr dazu weiter unten)."}]}, {"id": "setup", "heading": "OpenCode für Designarbeit einrichten, von null", "blocks": [{"kind": "p", "text": "Hier ist der komplette Weg von einer frischen Maschine zu einem OpenCode, das UI bauen und verifizieren kann."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Fünfstufiger Einrichtungsablauf: installieren, mit deinem Provider-Key authentifizieren, AGENTS.md konfigurieren, eine skill hinzufügen, verifizieren", "caption": "Die Einrichtungssequenz: installieren → authentifizieren (dein Provider-Key) → AGENTS.md konfigurieren → eine skill hinzufügen → in einem echten Browser verifizieren."}, {"kind": "steps", "items": [{"label": "Hinterlege deine Designregeln", "body": "Schreibe deine tokens, Primitive und Konventionen in AGENTS.md (oder eine daraus referenzierte DESIGN.md), damit der Output zu einer Marke passt, statt zu einem generischen Look zurückzufallen. Die instructions-Option in opencode.json kann über globs auf zusätzliche Regeldateien verweisen."}, {"label": "Wähle ein leistungsfähiges Modell", "body": "Weil OpenCode modell-agnostisch ist, wähle für den Design-Durchlauf den Provider / das Modell, das gerade am stärksten im Frontend ist — und lass den Rest deines Workflows unverändert."}]}]}, {"id": "screenshot-workflow", "heading": "Der Screenshot-zu-UI-Workflow", "blocks": [{"kind": "p", "text": "Die wirkungsvollste Design-Schleife mit jedem Agenten besteht darin, ein Referenzbild in funktionierende, responsive UI zu verwandeln und zu iterieren, bis es passt. Dieselbe fünfstufige Form gilt in OpenCode."}, {"kind": "ol", "items": ["Beginne mit den klarsten visuellen Referenzen, die du hast — und nimm mehrere Zustände auf (Desktop und Mobile, Hover, leer, ladend), nicht nur einen Hero-Shot.", "Sei im Prompt konkret; vage Prompts erzeugen generische UI.", "Bereite ein Designsystem vor und sag OpenCode, wo die tokens und kanonischen Primitive liegen (in AGENTS.md).", "Lass einen Dev-Server laufen und lass den Agenten in einem echten Browser rendern, wobei er auf Breakpoints umstellt, um das Ergebnis zu prüfen.", "Iteriere, indem du OpenCode seine Umsetzung mit den Screenshots abgleichen lässt — nicht bloß bestätigen, dass es baut."]}, {"kind": "p", "text": "Referenziere Dateien mit @ in der TUI für eine Fuzzy-Suche deines Arbeitsverzeichnisses, führe Shell-Befehle inline mit vorangestelltem ! aus und steuere Aktionen mit /-Befehlen. Prompte dann mit konkreten Vorgaben:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Halte Prompts klein und fokussiert, committe gute Iterationen und verwirf schlechte (und teile OpenCode mit, wenn du zurücksetzt), damit jeder Durchlauf auf einer sauberen Basis aufbaut."}]}, {"id": "extend", "heading": "AGENTS.md, MCP und teilbare Sessions", "blocks": [{"kind": "p", "text": "Drei Erweiterungspunkte machen OpenCode für nachhaltige Designarbeit praktisch, und alle drei bilden sauber einen offenen Design-Workflow ab."}, {"kind": "steps", "items": [{"label": "AGENTS.md-Regeln", "body": "Projektregeln liegen in einer AGENTS.md im Repo-Stamm (oder als globale Regeln in ~/.config/opencode/AGENTS.md). Es ist die dauerhafte Heimat für deine Design-Konventionen, wird bei jedem Durchlauf gelesen und ist mit den CLAUDE.md-Dateien kompatibel, die andere Agenten verwenden."}, {"label": "MCP-Server", "body": "OpenCode unterstützt sowohl lokale (command) als auch entfernte (URL) MCP-Server, konfiguriert unter dem mcp-Schlüssel — der portable Weg, Design-Kontext und externe Tools einzubinden, die über Agenten hinweg funktionieren, nicht nur in OpenCode."}, {"label": "Teilbare Sessions", "body": "Der /share-Befehl erstellt einen öffentlichen Link zu einer Konversation für Zusammenarbeit oder Review, und /unshare widerruft ihn — nützlich, um Feedback zu einem Design-Durchlauf einzuholen."}]}, {"kind": "p", "text": "Das sind portable, agentenübergreifende Fähigkeiten — genau die Art Sache, die Open Design orchestrieren soll, statt sie pro Projekt neu zu erstellen."}]}, {"id": "vs", "heading": "OpenCode vs. Codex vs. Claude Code vs. Cursor für Design", "blocks": [{"kind": "p", "text": "Es gibt keinen einzelnen Gewinner für Designarbeit — jeder Agent hat eine andere Stärke, und erfahrene Teams kombinieren sie. Eine faire Zusammenfassung:"}, {"kind": "table", "columns": ["Agent", "Design-Stärke", "Am besten für"], "rows": [["OpenCode", "Quelloffen und modell-agnostisch; jeden Provider hinter einem Terminal-Workflow laufen lassen", "BYOK-Freiheit, Modellwechsel, vollständig offene und local-first Setups"], ["Codex", "Starker visueller Feinschliff mit einer frontend-skill; Bildverständnis", "Delegiert asynchron, sandboxed Builds, portable AGENTS.md-Regeln"], ["Claude Code", "Konkrete Designentscheidungen (hex, Abstände, Typografie) und codebasis-bewusstes UX", "Frontend-Argumentation und Refactorings mit großem Kontext"], ["Cursor", "Visuelle Build-and-See-Schleife mit Live-Vorschau und Inline-Edits", "Enge iterieren-und-beobachten-UI-Arbeit innerhalb einer IDE"]]}, {"kind": "p", "text": "Das wiederkehrende Urteil der Community lautet, dass Geschmack von Menschen kommt: Alle tendieren ohne skills, Referenzen und Vorgaben zu einer generischen Ästhetik. Das ist das eigentliche Problem, das es zu lösen gilt — und es hat die Form eines Design-Tools, nicht die eines Modells, was genau der Grund ist, warum ein offener Agent wie OpenCode so gut zu einer offenen Design-Schicht passt."}]}, {"id": "pitfalls", "heading": "Fallstricke und wie du den „AI-Slop“-Look vermeidest", "blocks": [{"kind": "p", "text": "Die häufigste Klage über KI-generiertes Design lautet, dass es generisch aussieht — weiche Verläufe, schwebende Panels, übergroße runde Ecken, dramatische Schatten, eine Inter-und-Lila-Stimmung, die „schreit, dass eine KI das gemacht hat“. Weitere gemeldete Probleme sind kaputte Mobile-Layouts und Anweisungen, die in die UI-Texte durchsickern. Keines davon ist OpenCode-spezifisch; sie sind das, was passiert, wenn irgendein Agent ohne kuratierten Design-Kontext läuft."}, {"kind": "steps", "items": [{"label": "Füge eine ästhetische skill hinzu", "body": "Eine kuratierte Design-skill zwingt den Agenten, sich auf eine echte Richtung festzulegen, statt auf den Standard-Look."}, {"label": "Verifiziere in einem echten Browser", "body": "Rendere und prüfe über Breakpoints hinweg, damit Layouts nicht stillschweigend auf Mobilgeräten brechen."}, {"label": "Liefere tokens und Referenzen", "body": "Echte Design-tokens und Referenz-Screenshots sind der größte Einzelhebel für die Output-Qualität."}, {"label": "Hinterlege Regeln in AGENTS.md", "body": "Schreibe Regeln im Stil „keine Hero-Cards, höchstens zwei Schriftarten, markenorientierte Hierarchie“ dorthin, wo der Agent sie bei jedem Durchlauf liest."}]}, {"kind": "p", "text": "Beachte: Jede dieser Maßnahmen dreht sich darum, dem Agenten einen kuratierten Design-Kontext zu geben — unabhängig davon, welches Modell du laufen lässt. Diesen Kontext von Hand und pro Projekt zu pflegen, ist genau die Mühsal, die Open Design beseitigt."}]}, {"id": "open-design", "heading": "Mit OpenCode in Open Design gestalten", "blocks": [{"kind": "p", "text": "Open Design ist die quelloffene Design-Schicht, nach der der obige Workflow immer wieder verlangt. Es behandelt OpenCode als First-Party-Adapter und umgibt es mit einer kuratierten skill- und Designsystem-Bibliothek, einer strukturierten Render-Pipeline und einer lokalen Desktop-UI — sodass der Design-Kontext, der jeden Agenten gut macht, vom ersten Durchlauf an da ist, statt jedes Mal von Hand zusammengebaut zu werden. Beide Projekte sind quelloffen und local-first, was die Paarung zu einer natürlichen Wahl macht."}, {"kind": "ol", "items": ["Installiere Open Design und wähle OpenCode als deinen Agenten.", "Authentifiziere dich mit deinem eigenen API-Key des Modell-Providers (BYOK) — die Zugangsdaten bleiben auf deiner Maschine und werden niemals über uns geleitet.", "Wähle einen beliebigen Provider und ein Modell, dazu ein Designsystem und eine skill, und erzeuge dann Decks, Prototypen und Landingpages mit konsistentem Geschmack.", "Jedes Artefakt und jede DESIGN.md-Datei liegt in deinem eigenen Repo, nicht in einer gehosteten Cloud."]}, {"kind": "p", "text": "Derselbe OpenCode-Agent, dieselbe Modell-Freiheit — plus ein echter, portabler, quelloffener Design-Workflow drumherum. Es ist local-first und Apache-2.0, sodass nichts an deiner Arbeit oder deinen Zugangsdaten deine Maschine verlässt."}]}], "faqTitle": "Häufig gestellte Fragen", "faq": [{"name": "Kann OpenCode wirklich Designarbeit leisten?", "text": "Ja — mit einer ästhetischen skill, einem Designsystem und echten Referenzbildern im Kontext liefert OpenCode produktionsreife, responsive UI und kann sie in einem Browser verifizieren. Weil es modell-agnostisch ist, lässt du das Modell laufen, das gerade am besten im Frontend ist. Ohne diesen kuratierten Kontext fällt es tendenziell auf einen generischen Look zurück — und genau diese Lücke schließt Open Design."}, {"name": "Welches Modell sollte ich mit OpenCode für Design verwenden?", "text": "Welches du magst — OpenCode ist über models.dev provider-agnostisch, sodass du Anthropic, OpenAI, Google, OpenRouter oder lokale Modelle hinter demselben Workflow laufen lassen und jederzeit wechseln kannst. Die Qualität des Design-Outputs hängt weit mehr von deiner skill, deinem Designsystem und deinen Referenzen ab als vom Modell allein."}, {"name": "Ist Open Design vom OpenCode- (SST-)Team gemacht?", "text": "Nein. Open Design ist ein unabhängiges quelloffenes Projekt, das OpenCode als Agenten integriert. Es ergänzt OpenCode um eine local-first, offene skill- und Designsystem-Bibliothek."}, {"name": "Brauche ich ein spezielles Abo, um mit OpenCode zu gestalten?", "text": "Nein — OpenCode ist BYOK. Du bringst deinen eigenen API-Key des Modell-Providers mit, und Open Design leitet deine Zugangsdaten niemals weiter. Es gibt kein Vendor-Lock-in."}, {"name": "OpenCode oder Codex oder Claude Code für Frontend-Design?", "text": "Alle sind stark, und viele Teams kombinieren sie. OpenCodes Vorteil ist, vollständig quelloffen und modell-agnostisch zu sein; Codex glänzt bei delegierten, sandboxed Builds; Claude Code ist bekannt für konkrete, codebasis-bewusste Designentscheidungen. Open Design lässt dich die Agenten wechseln, ohne deinen Design-Workflow zu ändern."}, {"name": "Wie erweitere ich OpenCode um Design-Kontext?", "text": "Hinterlege Regeln in AGENTS.md, füge MCP-Server unter dem mcp-Schlüssel für portable Tools und Design-Kontext hinzu und nutze teilbare Sessions für Reviews. Open Design liefert eine kuratierte skill- und Designsystem-Bibliothek aus, sodass du das Setup pro Projekt überspringst."}, {"name": "Ist Open Design mit OpenCode oder SST verbunden?", "text": "Nein. OpenCode ist ein quelloffenes Projekt, das von SST (Anomaly Innovations) gepflegt wird; Open Design ist ein unabhängiges quelloffenes Projekt, das es als First-Party-Adapter unterstützt."}, {"name": "Sind meine Dateien und Zugangsdaten sicher?", "text": "Ja — Open Design ist local-first. Deine Dateien, Artefakte und DESIGN.md bleiben in deinem eigenen Repo, und deine Zugangsdaten des Modell-Providers werden direkt von deinem Agenten genutzt, niemals über Open-Design-Server geleitet."}], "ctaTitle": "Gestalte mit OpenCode, auf die offene Art.", "ctaBody": "Bring deinen eigenen Modell-Provider-Key mit, behalte jede Datei lokal und erhalte eine kuratierte Design-Bibliothek rund um den offenen Agenten, den du ohnehin schon nutzt.", "ctaActions": [{"label": "OpenCode in Open Design verwenden", "href": "/quickstart/", "variant": "primary"}, {"label": "Auf GitHub mit Stern markieren", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Desktop-App herunterladen", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Alle unterstützten Agenten ansehen"}, + }, + }, + }; +} diff --git a/apps/landing-page/app/agent-guides.part-b.i18n.ts b/apps/landing-page/app/agent-guides.part-b.i18n.ts new file mode 100644 index 0000000000..7fab059853 --- /dev/null +++ b/apps/landing-page/app/agent-guides.part-b.i18n.ts @@ -0,0 +1,186 @@ +/* + * Localized agent-guide copy (part B) for the landing-page agent detail pages. + * + * Split across part files to stay under the repo's changed-file blob guard. + * Each part spreads the English guide first (so non-rendered compact fields + * stay type-complete) then overrides the rendered fields + rich payload with + * the translation. Machine-translated from English; native review welcome. + */ +import type { InfoPageCopy } from './info-page-i18n'; +import type { LandingLocaleCode } from './i18n'; + +type Guides = NonNullable; + + +export function localizedAgentGuidesPartB(en: Guides): Partial> { + return { + 'fr': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code pour le design — Open Design", + description: "Comment les designers utilisent Claude Code pour le design d’interfaces et de sites web, et comment Open Design en fait un véritable agent de design — local-first, BYOK, avec une bibliothèque organisée de skills et de design systems.", + breadcrumb: "Claude Code", + label: "Agent · Claude Code", + heading: "Claude Code pour le design.", + lead: "Claude Code est l’agent de code en terminal d’Anthropic. On l’utilise déjà pour construire des interfaces, des design systems et des landing pages. Open Design le branche sur un véritable workflow de design — apportez votre clé Anthropic ou votre abonnement Claude, gardez chaque fichier en local.", + rich: {"heroCtaLead": "Open Design transforme Claude Code en un agent de design open source et local-first — votre clé Anthropic ou votre abonnement Claude, vos fichiers, et autour, une bibliothèque organisée de skills et de design systems.", "heroCtaActions": [{"label": "Utiliser Claude Code dans Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Star sur GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Télécharger l’application desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code est largement considéré comme l’agent de code au meilleur goût en frontend — il raisonne sur les interfaces avec une précision inhabituelle, nommant des valeurs hex exactes, des espacements et des échelles typographiques, et il refactorise l’UI à travers une grande base de code sans perdre le fil. Mais tel quel, il dérive encore vers un rendu générique tant que vous ne lui fournissez pas un design system, des skills et de vraies références. Voici un guide pratique et complet pour utiliser Claude Code dans un travail d’UI, de frontend et de design system, et pour l’intégrer à un workflow structuré avec Open Design.", "Il couvre ce qu’est réellement Claude Code, pourquoi il excelle en frontend, comment le configurer à partir de zéro, le workflow CLAUDE.md et Skills, l’aller-retour officiel avec Figma, sa comparaison avec Codex et Cursor, les pièges qui rendent les sorties d’IA génériques, et comment Open Design comble l’écart en tant que couche de design ouverte et local-first."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Boucle de rétroaction de design avec Claude Code : un agent en terminal prenant des décisions de design précises, un navigateur affichant l’UI et un espace de travail, avec une flèche de rétroaction qui boucle", "caption": "La boucle centrale : Claude Code raisonne sur des décisions d’UI précises dans le terminal, les affiche et les vérifie dans un vrai navigateur, et converge vers vos références."}, "tocLabel": "Sur cette page", "toc": [{"id": "what-is-claude-code", "label": "Ce qu’est réellement Claude Code"}, {"id": "why-design", "label": "Pourquoi Claude Code est bon en design"}, {"id": "setup", "label": "Configurer Claude Code pour le design (à partir de zéro)"}, {"id": "skills-workflow", "label": "Le workflow CLAUDE.md et Skills"}, {"id": "figma", "label": "Aller-retour Claude Code + Figma"}, {"id": "vs", "label": "Claude Code vs Codex vs Cursor"}, {"id": "pitfalls", "label": "Les pièges et le rendu « AI slop »"}, {"id": "open-design", "label": "Concevoir avec Claude Code dans Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-claude-code", "heading": "Ce qu’est réellement Claude Code", "blocks": [{"kind": "p", "text": "Claude Code est l’outil de code agentique d’Anthropic. Il lit votre base de code, modifie des fichiers, exécute des commandes et s’intègre à vos outils de développement — il planifie, écrit et vérifie le travail à partir de tâches en langage naturel, plutôt que de se contenter de compléter des lignes."}, {"kind": "p", "text": "Il se décline sur plusieurs surfaces qui partagent toutes le même moteur : une CLI en terminal, des extensions IDE pour VS Code, Cursor et JetBrains, une application desktop avec revue visuelle des diffs, et une expérience web pour les tâches de longue durée. Vos fichiers CLAUDE.md, vos réglages et vos serveurs MCP s’appliquent à toutes."}, {"kind": "steps", "items": [{"label": "Fichier d’instructions", "body": "Claude Code lit un fichier CLAUDE.md à la racine de votre projet au début de chaque session — l’endroit naturel pour encoder vos conventions de design, vos tokens et vos checklists de revue."}, {"label": "Skills", "body": "Les Agent Skills regroupent des instructions, scripts et ressources réutilisables que Claude charge à la demande, y compris la skill officielle Frontend Design d’Anthropic pour le goût."}, {"label": "Plan et sous-agents", "body": "Il peut planifier avant d’agir et lancer des sous-agents qui travaillent en parallèle sur différentes parties d’une tâche, ce qui maintient la cohérence des grands refactors d’UI."}]}, {"kind": "ul", "items": ["Éditeur : Anthropic", "Identifiant : clé API Anthropic (BYOK, via la Console) ou abonnement Claude (Pro / Max)", "Surfaces : CLI en terminal, extensions VS Code / Cursor / JetBrains, application desktop, web"]}]}, {"id": "why-design", "heading": "Pourquoi Claude Code est bon en design", "blocks": [{"kind": "p", "text": "Parmi les agents de code, Claude Code a une réputation de goût pour le travail en frontend. Quelques raisons l’expliquent."}, {"kind": "steps", "items": [{"label": "Des décisions précises, pas vagues", "body": "Claude Code a tendance à s’engager sur des choix concrets — valeurs hex exactes, échelles d’espacement, rampes typographiques et hiérarchie des composants — au lieu de rester évasif, ce qui distingue une vraie interface d’une maquette de remplissage."}, {"label": "Un raisonnement conscient de la base de code", "body": "Avec un large contexte de travail, il refactorise l’UI à travers de nombreux fichiers à la fois, en réutilisant vos composants et tokens existants au lieu de réinventer des styles isolés."}, {"label": "Une skill frontend officielle", "body": "Anthropic fournit une skill Frontend Design qui amène Claude à définir d’abord une direction de design et l’éloigne délibérément des polices système génériques et des dégradés violets prévisibles."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Schéma montrant un design system, une skill et une image de référence convergeant vers une bonne sortie de design", "caption": "Le goût vient de trois entrées que vous fournissez : un design system, une skill et de vraies images de référence."}, {"kind": "p", "text": "La leçon est la même que celle qu’Anthropic formule à propos de ses propres modèles : Claude n’a pas de goût par défaut — laissé à lui-même, il converge vers le centre statistique du web design (Inter, dégradés violets, ombres douces). Il produit de bons designs quand vous lui donnez des contraintes. Open Design empaquette précisément ces entrées, et c’est pourquoi les deux s’accordent (plus de détails ci-dessous)."}]}, {"id": "setup", "heading": "Configurer Claude Code pour le design, à partir de zéro", "blocks": [{"kind": "p", "text": "Voici le parcours complet, d’une machine vierge à un Claude Code capable de construire et de vérifier des UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Flux de configuration en cinq étapes : installer, authentifier, configurer CLAUDE.md, ajouter une skill, vérifier", "caption": "La séquence de configuration : installer → authentifier → configurer CLAUDE.md → ajouter la skill Frontend Design → activer la vérification en navigateur."}, {"kind": "steps", "items": [{"label": "Encodez vos règles de design", "body": "Mettez vos tokens, primitives et conventions dans CLAUDE.md et orientez Claude vers eux, pour que les sorties correspondent à une marque au lieu de retomber sur un rendu générique."}, {"label": "Ajoutez la vérification en navigateur", "body": "Branchez un MCP Playwright ou Chrome pour que Claude rende dans un vrai navigateur et contrôle ses sorties sur les différents breakpoints, au lieu de simplement confirmer que le build passe."}]}]}, {"id": "skills-workflow", "heading": "Le workflow CLAUDE.md et Skills", "blocks": [{"kind": "p", "text": "La boucle de design la plus efficace avec Claude Code consiste à lui donner de vraies références ainsi que votre contexte de design, puis à itérer jusqu’à ce que l’UI corresponde — avec CLAUDE.md et les Skills qui portent les contraintes pour ne pas avoir à les réexpliquer à chaque prompt."}, {"kind": "ol", "items": ["Partez des références visuelles les plus claires dont vous disposez — et incluez plusieurs états (desktop et mobile, survol, vide, chargement), pas seulement un visuel héros.", "Soyez précis dans le prompt ; des prompts vagues produisent une UI générique, même avec un agent puissant.", "Gardez votre design system et vos conventions dans CLAUDE.md, et indiquez à Claude où se trouvent les tokens et les primitives canoniques.", "Ajoutez la skill Frontend Design pour que Claude s’engage sur une véritable direction esthétique avant d’écrire du code.", "Branchez la vérification en navigateur pour que Claude rende, redimensionne aux breakpoints et compare aux références — au lieu de simplement confirmer que ça build."]}, {"kind": "p", "text": "Déposez une image de référence dans la session et formulez le prompt avec des contraintes concrètes :"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Faites tourner un serveur de dev en parallèle, gardez des prompts courts et ciblés, committez les bonnes itérations / annulez les mauvaises (en prévenant Claude quand vous revenez en arrière) pour que chaque passe parte d’une base propre. Utilisez le mode plan pour les refactors plus importants afin de pouvoir relire l’approche avant toute modification de fichier."}]}, {"id": "figma", "heading": "Claude Code + Figma : aller-retour design ↔ code", "blocks": [{"kind": "p", "text": "En février 2026, Anthropic et Figma ont livré une intégration bidirectionnelle de premier ordre via le serveur Figma MCP. Elle fonctionne dans les deux sens."}, {"kind": "steps", "items": [{"label": "Design → Code", "body": "Sélectionnez une frame dans Figma ou collez un lien dans Claude Code, récupérez le contexte de design et demandez-lui d’implémenter la maquette avec votre bibliothèque de composants existante. Code Connect garde les sorties alignées sur vos vrais composants."}, {"label": "Code → Design", "body": "Construisez et prévisualisez une fonctionnalité dans le navigateur, puis dites « Send this to Figma » pour capturer l’UI en cours d’exécution sous forme de calques Figma éditables — écran entier ou élément sélectionné."}]}, {"kind": "p", "text": "Installez-le une fois avec claude plugin install figma@claude-plugins-official (le MCP Dev Mode requiert un plan Figma payant). Le même Figma MCP est disponible pour Claude Code, Codex, Cursor et VS Code — exactement le genre de capacité portable et multi-agent qu’Open Design est conçu pour orchestrer."}]}, {"id": "vs", "heading": "Claude Code vs Codex vs Cursor pour le design", "blocks": [{"kind": "p", "text": "Il n’y a pas de vainqueur unique pour le travail de design — chaque agent a une force différente, et les équipes expérimentées les combinent. Un résumé équilibré :"}, {"kind": "table", "columns": ["Agent", "Force en design", "Idéal pour"], "rows": [["Claude Code", "Décisions de design précises (hex, espacement, typographie) et raisonnement UX conscient de la base de code", "Le raisonnement frontend et les refactors à large contexte"], ["Codex", "Forte finition visuelle et compréhension d’images ; builds async en sandbox", "Les builds async délégués et les règles AGENTS.md portables"], ["Cursor", "Boucle visuelle construire-et-voir avec aperçu en direct et éditions inline", "Le travail d’UI en boucle serrée d’itération au sein d’un IDE"]]}, {"kind": "p", "text": "Le verdict récurrent de la communauté est que le goût vient des humains : les trois retombent sur une esthétique générique sans skills, références et contraintes. C’est le vrai problème à résoudre — et il a la forme d’un outil de design, pas d’un modèle."}]}, {"id": "pitfalls", "heading": "Les pièges, et comment éviter le rendu « AI slop »", "blocks": [{"kind": "p", "text": "Malgré la réputation de goût de Claude Code, la critique la plus fréquente à l’égard du design généré par IA est qu’il a l’air générique — polices Inter, dégradés violets sur blanc, ombres douces, coins arrondis surdimensionnés, une esthétique qui « crie qu’une IA a fait ça ». Anthropic elle-même attribue cela à une convergence distributionnelle : les choix sûrs dominent les données d’entraînement du web. Parmi les autres problèmes signalés : des mises en page mobiles cassées et des instructions qui fuient dans les textes de l’UI."}, {"kind": "steps", "items": [{"label": "Installez la skill Frontend Design", "body": "Elle force Claude à s’engager sur une vraie direction et évite explicitement les polices et dégradés surexploités par l’IA."}, {"label": "Activez la vérification en navigateur", "body": "Faites en sorte que Claude rende et se contrôle lui-même sur les différents breakpoints pour que les mises en page ne cassent pas en silence sur mobile."}, {"label": "Fournissez tokens et références", "body": "De vrais tokens de design et des captures de référence sont le plus grand levier sur la qualité des sorties."}, {"label": "Encodez les règles dans CLAUDE.md", "body": "Mettez des règles de style comme « pas de hero cards, deux familles typographiques au maximum, hiérarchie qui met la marque d’abord » là où l’agent les lit à chaque exécution."}]}, {"kind": "p", "text": "Remarquez que chaque parade revient à donner à l’agent un contexte de design organisé. Maintenir ce contexte à la main, projet par projet, est le labeur qu’Open Design supprime."}]}, {"id": "open-design", "heading": "Concevoir avec Claude Code dans Open Design", "blocks": [{"kind": "p", "text": "Open Design est la couche de design open source que le workflow ci-dessus ne cesse de réclamer. Il traite Claude Code comme un adaptateur de première partie et l’entoure d’une bibliothèque organisée de skills et de design systems, d’un pipeline de rendu structuré et d’une UI desktop locale — pour que le contexte de design qui rend Claude Code bon soit présent dès la première exécution, et non assemblé à la main à chaque fois."}, {"kind": "ol", "items": ["Installez Open Design et sélectionnez Claude Code comme agent.", "Authentifiez-vous avec votre clé API Anthropic (BYOK) ou votre abonnement Claude — les identifiants restent sur votre machine et ne transitent jamais par nos serveurs.", "Choisissez un design system et une skill, puis générez des decks, des prototypes et des landing pages avec un goût cohérent.", "Chaque artefact et fichier DESIGN.md vit dans votre propre dépôt, pas dans un cloud hébergé."]}, {"kind": "p", "text": "Le même agent Claude Code, la même clé — auxquels s’ajoute un véritable workflow de design open source, portable, autour de lui. C’est local-first et Apache-2.0, donc rien de votre travail ni de vos identifiants ne quitte votre machine."}]}], "faqTitle": "Questions fréquentes", "faq": [{"name": "Claude Code est-il bon pour le travail de design ?", "text": "Oui — il est largement considéré comme l’agent de code au meilleur goût en frontend, prenant des décisions précises et conscientes de la base de code sur les valeurs hex, l’espacement et les échelles typographiques. Avec la skill Frontend Design, un design system et de vraies images de référence dans le contexte, il produit une UI responsive de qualité production et peut la vérifier dans un navigateur. Sans ce contexte, il a tendance à retomber sur un rendu générique, et c’est l’écart que comble Open Design."}, {"name": "Ai-je besoin d’un abonnement Claude pour concevoir avec Claude Code ?", "text": "Vous pouvez utiliser soit une clé API Anthropic (BYOK, via la Console), soit un abonnement Claude (Pro / Max). Dans les deux cas, Open Design ne fait jamais transiter vos identifiants — ils sont utilisés directement par votre agent sur votre machine."}, {"name": "Claude Code ou Codex pour le design frontend ?", "text": "Les deux sont solides. Claude Code est reconnu pour ses décisions de design précises et conscientes de la base de code et pour son raisonnement frontend ; Codex offre une forte finition visuelle et excelle dans les builds délégués en sandbox. Beaucoup d’équipes utilisent les deux — Open Design vous laisse changer d’agent sans changer votre workflow de design."}, {"name": "Comment connecter Claude Code à Figma ?", "text": "Installez le plugin Figma officiel avec claude plugin install figma@claude-plugins-official. Vous pouvez ensuite implémenter des frames Figma en code à partir du contexte de design, et renvoyer une UI en cours d’exécution vers des frames Figma éditables avec « Send this to Figma ». Le MCP Dev Mode requiert un plan Figma payant."}, {"name": "Que sont les Skills et CLAUDE.md ?", "text": "CLAUDE.md est un fichier markdown à la racine de votre projet que Claude Code lit au début de chaque session — l’endroit où encoder vos conventions de design. Les Skills regroupent des instructions et ressources réutilisables que Claude charge à la demande, y compris la skill officielle Frontend Design d’Anthropic. Open Design fournit une bibliothèque organisée des deux pour vous éviter la configuration projet par projet."}, {"name": "Comment éviter l’esthétique générique « AI slop » ?", "text": "Installez la skill Frontend Design, fournissez de vrais tokens de design et des captures de référence, encodez les règles de marque dans CLAUDE.md et activez la vérification en navigateur. Open Design les livre sous forme de bibliothèque organisée pour vous éviter la configuration projet par projet."}, {"name": "Open Design est-il affilié à Anthropic ?", "text": "Non. Claude Code est un produit d’Anthropic ; Open Design est un projet open source indépendant qui le prend en charge comme adaptateur de première partie. Claude et Claude Code sont des marques d’Anthropic."}, {"name": "Mes fichiers et identifiants sont-ils en sécurité ?", "text": "Oui — Open Design est local-first et Apache-2.0. Vos fichiers, artefacts et DESIGN.md restent dans votre propre dépôt, et vos identifiants Anthropic sont utilisés directement par votre agent, jamais routés via les serveurs d’Open Design."}], "ctaTitle": "Concevez avec Claude Code, à la manière ouverte.", "ctaBody": "Apportez votre propre clé Anthropic ou votre abonnement Claude, gardez chaque fichier en local et obtenez une bibliothèque de design organisée autour de l’agent que vous utilisez déjà.", "ctaActions": [{"label": "Utiliser Claude Code dans Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Star sur GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Télécharger l’application desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Voir tous les agents pris en charge"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex pour le design — Open Design", + description: "Comment on utilise OpenAI Codex pour le design d’interfaces et de sites web — le plugin Product Design, l’intégration Figma, les skills frontend — et comment Open Design en fait un agent de design open source et local-first.", + breadcrumb: "Codex", + label: "Agent · Codex", + heading: "Codex pour le design.", + lead: "Codex est l’agent de code d’OpenAI. Avec son plugin Product Design et son intégration Figma, il est devenu un véritable outil de design. Open Design branche Codex sur un workflow de design open source — votre clé OpenAI ou votre abonnement ChatGPT, vos fichiers, local-first.", + rich: {"heroCtaLead": "Open Design transforme Codex en un agent de design open source et local-first — votre clé OpenAI, vos fichiers, et autour, une bibliothèque organisée de skills et de design systems.", "heroCtaActions": [{"label": "Utiliser Codex dans Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Star sur GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Télécharger l’application desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex a démarré comme générateur de code, mais en 2026 il est devenu un outil crédible pour concevoir de vraies interfaces — à condition de lui donner les bonnes références, les bonnes skills et une boucle de vérification. Voici un guide pratique et complet pour utiliser Codex dans un travail d’UI, de frontend et de design system, et pour l’intégrer à un workflow de design structuré avec Open Design.", "Il couvre ce qu’est Codex aujourd’hui, pourquoi il est soudain bon en frontend, comment le configurer à partir de zéro, la boucle capture-vers-UI, l’aller-retour officiel avec Figma, sa comparaison avec Cursor et Claude Code, les pièges qui rendent les sorties d’IA génériques, et comment Open Design comble l’écart en tant que couche de design ouverte et local-first."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Boucle de rétroaction de design avec Codex : un agent en terminal, un navigateur affichant l’UI et un espace de travail, avec une flèche de rétroaction qui boucle", "caption": "La boucle centrale : Codex construit l’UI dans le terminal, la rend et la vérifie dans un vrai navigateur, et itère par rapport à vos références."}, "tocLabel": "Sur cette page", "toc": [{"id": "what-is-codex", "label": "Ce qu’est réellement OpenAI Codex"}, {"id": "why-design", "label": "Pourquoi Codex est bon en design désormais"}, {"id": "setup", "label": "Configurer Codex pour le design (à partir de zéro)"}, {"id": "screenshot-workflow", "label": "Le workflow capture-vers-UI"}, {"id": "figma", "label": "Aller-retour Codex + Figma"}, {"id": "vs", "label": "Codex vs Cursor vs Claude Code"}, {"id": "pitfalls", "label": "Les pièges et le rendu « AI slop »"}, {"id": "open-design", "label": "Concevoir avec Codex dans Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-codex", "heading": "Ce qu’est réellement OpenAI Codex (et ce qu’il n’est pas)", "blocks": [{"kind": "p", "text": "D’abord, une mise au point qui désarçonne presque tous ceux qui cherchent « Codex ». Le Codex d’OpenAI d’origine était un modèle de complétion de code de 2021 qui propulsait les premiers GitHub Copilot et a été déprécié en 2023. Ce n’est pas le sujet de cette page. Le Codex d’aujourd’hui est l’outil de code agentique d’OpenAI — il planifie, écrit, exécute et vérifie du code à partir de tâches en langage naturel."}, {"kind": "p", "text": "Le Codex moderne se décline sur quatre surfaces : une CLI en terminal (réécrite en Rust, sous licence Apache-2.0), une extension IDE pour VS Code, Cursor et Windsurf, une expérience cloud/web pour les tâches async déléguées, et une application desktop avec un navigateur intégré et Computer Use."}, {"kind": "steps", "items": [{"label": "Modèle par défaut", "body": "À la mi-2026, le modèle recommandé est gpt-5.5, gpt-5.4 étant le modèle qu’OpenAI a explicitement entraîné pour le frontend et l’usage de l’ordinateur."}, {"label": "Fichier d’instructions", "body": "Codex lit un fichier AGENTS.md dans votre projet (un standard inter-outils) pour les règles de projet — l’endroit naturel pour encoder vos conventions de design."}, {"label": "Sandbox", "body": "Il s’exécute dans un sandbox au niveau noyau (workspace-write par défaut), de sorte qu’un agent qui modifie votre UI ne peut pas sortir du projet."}]}, {"kind": "ul", "items": ["Éditeur : OpenAI", "Identifiant : clé API OpenAI (BYOK) ou abonnement ChatGPT (Free / Go / Plus / Pro / Business / Enterprise)", "Licence de la CLI : Apache-2.0, open source"]}]}, {"id": "why-design", "heading": "Pourquoi Codex est bon en design désormais", "blocks": [{"kind": "p", "text": "Trois choses ont convergé début 2026 pour faire de Codex un véritable outil de design plutôt qu’un générateur de code générique."}, {"kind": "steps", "items": [{"label": "Un modèle entraîné pour le frontend", "body": "OpenAI a livré GPT-5.4, son premier modèle mainline entraîné pour le frontend et l’usage de l’ordinateur, avec une bien meilleure compréhension d’images tout au long du workflow de design et une auto-vérification renforcée. Il peut même générer des mood boards et des options visuelles avant de s’engager sur les assets finaux."}, {"label": "Une skill frontend officielle", "body": "Le catalogue openai/skills fournit une frontend-skill organisée qui impose un vrai goût : des mises en page sans cartes, des héros pleine largeur, une hiérarchie qui met la marque d’abord, un mouvement sobre, deux familles typographiques et une couleur d’accent au maximum — et amène Codex à écrire une thèse visuelle avant de construire."}, {"label": "La vérification en navigateur", "body": "Avec la skill Playwright, Codex ouvre un vrai navigateur, redimensionne aux breakpoints et compare ses sorties à la référence au lieu de simplement vérifier que le build passe."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Schéma montrant un design system, une skill et une image de référence convergeant vers une bonne sortie de design", "caption": "Le goût vient de trois entrées que vous fournissez : un design system, une skill et de vraies images de référence."}, {"kind": "p", "text": "La leçon derrière ces trois points : Codex n’a pas de goût par défaut. Il produit de bons designs quand vous lui donnez des contraintes — un design system, une skill esthétique et des références concrètes. Open Design empaquette précisément ces entrées, et c’est pourquoi les deux s’accordent (plus de détails ci-dessous)."}]}, {"id": "setup", "heading": "Configurer Codex pour le design, à partir de zéro", "blocks": [{"kind": "p", "text": "Voici le parcours complet, d’une machine vierge à un Codex capable de construire et de vérifier des UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Flux de configuration en cinq étapes : installer, authentifier, configurer, installer la skill, vérifier", "caption": "La séquence de configuration : installer → authentifier → configurer AGENTS.md → installer la skill frontend → activer la vérification en navigateur."}, {"kind": "steps", "items": [{"label": "Encodez vos règles de design", "body": "Mettez vos tokens, primitives et conventions dans AGENTS.md ou un DESIGN.md et orientez Codex vers eux, pour que les sorties correspondent à une marque au lieu de retomber sur un rendu générique."}, {"label": "Choisissez le bon niveau de raisonnement", "body": "OpenAI note que les niveaux de raisonnement faibles à moyens produisent souvent de meilleurs résultats frontend que le réglage le plus élevé."}]}]}, {"id": "screenshot-workflow", "heading": "Le workflow capture-vers-UI", "blocks": [{"kind": "p", "text": "La boucle de design la plus efficace avec Codex consiste à transformer une image de référence en une UI fonctionnelle et responsive, puis à itérer jusqu’à ce qu’elle corresponde. Les recommandations d’OpenAI elles-mêmes se résument à cinq étapes."}, {"kind": "ol", "items": ["Partez des références visuelles les plus claires dont vous disposez — et incluez plusieurs états (desktop et mobile, survol, vide, chargement), pas seulement un visuel héros.", "Soyez précis dans le prompt ; des prompts vagues produisent une UI générique.", "Préparez un design system et indiquez à Codex où se trouvent les tokens et les primitives canoniques.", "Activez la skill interactive Playwright pour que Codex rende dans un vrai navigateur et redimensionne aux breakpoints.", "Itérez en faisant comparer à Codex son implémentation avec les captures — au lieu de simplement confirmer que ça build."]}, {"kind": "p", "text": "Fournissez les images en glissant une capture dans le terminal ou via le flag image, puis formulez le prompt avec des contraintes concrètes :"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Faites tourner un serveur de dev dans un second terminal, gardez des prompts courts et ciblés, committez les bonnes itérations / annulez les mauvaises (en prévenant Codex quand vous revenez en arrière) pour que chaque passe parte d’une base propre."}]}, {"id": "figma", "heading": "Codex + Figma : aller-retour design ↔ code", "blocks": [{"kind": "p", "text": "En février 2026, OpenAI et Figma ont annoncé un partenariat officiel, transformant la précédente bêta du Figma MCP en une intégration bidirectionnelle de premier ordre. Elle fonctionne dans les deux sens."}, {"kind": "steps", "items": [{"label": "Design → Code", "body": "Copiez le « link to selection » d’une frame dans Figma, collez-le dans Codex avec get_design_context, et demandez-lui d’implémenter la maquette avec votre bibliothèque de composants existante."}, {"label": "Code → Design", "body": "L’outil generate_figma_design (« Code to Canvas ») retransforme une UI en cours d’exécution en frames Figma éditables — écran entier, élément sélectionné ou fichier complet."}]}, {"kind": "p", "text": "Le Figma MCP s’exécute comme un serveur distant et est exempté des limites de débit. Ajoutez-le une fois et il est disponible pour Codex, Claude Code, Cursor, VS Code et plus encore — exactement le genre de capacité portable et multi-agent qu’Open Design est conçu pour orchestrer."}]}, {"id": "vs", "heading": "Codex vs Cursor vs Claude Code pour le design", "blocks": [{"kind": "p", "text": "Il n’y a pas de vainqueur unique pour le travail de design — chaque agent a une force différente, et les équipes expérimentées les combinent. Un résumé équilibré :"}, {"kind": "table", "columns": ["Agent", "Force en design", "Idéal pour"], "rows": [["Codex", "Forte finition visuelle après GPT-5.4 + frontend-skill ; compréhension d’images", "Les builds async délégués, les exécutions en sandbox, les règles AGENTS.md portables"], ["Cursor", "Boucle visuelle construire-et-voir avec aperçu en direct et éditions inline", "Le travail d’UI en boucle serrée d’itération au sein d’un IDE"], ["Claude Code", "Décisions de design précises (hex, espacement, typographie) et UX consciente de la base de code", "Le raisonnement frontend et les refactors à large contexte"]]}, {"kind": "p", "text": "Le verdict récurrent de la communauté est que le goût vient des humains : les trois retombent sur une esthétique générique sans skills, références et contraintes. C’est le vrai problème à résoudre — et il a la forme d’un outil de design, pas d’un modèle."}]}, {"id": "pitfalls", "heading": "Les pièges, et comment éviter le rendu « AI slop »", "blocks": [{"kind": "p", "text": "La critique la plus fréquente à l’égard du design généré par Codex est qu’il a l’air générique — dégradés doux, panneaux flottants, coins arrondis surdimensionnés, ombres spectaculaires, une ambiance Inter-et-violet qui « crie qu’une IA a fait ça ». Parmi les autres problèmes signalés : des mises en page mobiles cassées, des instructions qui fuient dans les textes de l’UI et des limites d’usage atteintes rapidement."}, {"kind": "steps", "items": [{"label": "Installez une skill frontend", "body": "Une skill esthétique organisée force Codex à s’engager sur une vraie direction au lieu du rendu par défaut."}, {"label": "Activez la vérification Playwright", "body": "Faites en sorte que Codex rende et se contrôle lui-même sur les différents breakpoints pour que les mises en page ne cassent pas en silence sur mobile."}, {"label": "Fournissez tokens et références", "body": "De vrais tokens de design et des captures de référence sont le plus grand levier sur la qualité des sorties."}, {"label": "Encodez les règles dans AGENTS.md", "body": "Mettez des règles de style comme « pas de hero cards, deux familles typographiques au maximum, hiérarchie qui met la marque d’abord » là où l’agent les lit à chaque exécution."}]}, {"kind": "p", "text": "Remarquez que chaque parade revient à donner à l’agent un contexte de design organisé. Maintenir ce contexte à la main, projet par projet, est le labeur qu’Open Design supprime."}]}, {"id": "open-design", "heading": "Concevoir avec Codex dans Open Design", "blocks": [{"kind": "p", "text": "Open Design est la couche de design open source que le workflow ci-dessus ne cesse de réclamer. Il traite Codex comme un adaptateur de première partie et l’entoure d’une bibliothèque organisée de skills et de design systems, d’un pipeline de rendu structuré et d’une UI desktop locale — pour que le contexte de design qui rend Codex bon soit présent dès la première exécution, et non assemblé à la main à chaque fois."}, {"kind": "ol", "items": ["Installez Open Design et sélectionnez Codex comme agent.", "Authentifiez-vous avec votre clé API OpenAI (BYOK) ou votre abonnement ChatGPT — les identifiants restent sur votre machine et ne transitent jamais par nos serveurs.", "Choisissez un design system et une skill, puis générez des decks, des prototypes et des landing pages avec un goût cohérent.", "Chaque artefact et fichier DESIGN.md vit dans votre propre dépôt, pas dans un cloud hébergé."]}, {"kind": "p", "text": "Le même agent Codex, la même clé — auxquels s’ajoute un véritable workflow de design open source, portable, autour de lui. C’est local-first et Apache-2.0, donc rien de votre travail ni de vos identifiants ne quitte votre machine."}]}], "faqTitle": "Questions fréquentes", "faq": [{"name": "OpenAI Codex peut-il vraiment faire du travail de design ?", "text": "Oui — avec une skill frontend, un design system et de vraies images de référence dans le contexte, Codex (surtout sur GPT-5.4) produit une UI responsive de qualité production et peut la vérifier dans un navigateur. Sans ce contexte, il a tendance à retomber sur un rendu générique, et c’est l’écart que comble Open Design."}, {"name": "S’agit-il du plugin Product Design d’OpenAI Codex ?", "text": "Non. Open Design est un projet open source indépendant qui intègre Codex comme agent. Il complète l’outillage propre d’OpenAI avec une bibliothèque de skills et de design systems ouverte et local-first."}, {"name": "Ai-je besoin d’un abonnement ChatGPT pour concevoir avec Codex ?", "text": "Vous pouvez utiliser soit une clé API OpenAI (BYOK), soit votre abonnement ChatGPT. La connexion ChatGPT offre généralement des limites plus généreuses ; Open Design ne fait jamais transiter vos identifiants, dans les deux cas."}, {"name": "Codex ou Claude Code pour le design frontend ?", "text": "Les deux sont solides. Claude Code est reconnu pour ses décisions de design précises et conscientes de la base de code ; Codex offre une forte finition visuelle après GPT-5.4 et excelle dans les builds délégués en sandbox. Beaucoup d’équipes utilisent les deux — Open Design vous laisse changer d’agent sans changer votre workflow de design."}, {"name": "Comment connecter Codex à Figma ?", "text": "Ajoutez le serveur Figma MCP officiel (codex mcp add figma --url https://mcp.figma.com/mcp). Vous pouvez ensuite implémenter des frames Figma en code avec get_design_context et renvoyer une UI en cours d’exécution vers des frames Figma éditables avec generate_figma_design."}, {"name": "Comment éviter l’esthétique générique « AI slop » ?", "text": "Installez une skill frontend, fournissez de vrais tokens de design et des captures de référence, encodez les règles de marque dans AGENTS.md et activez la vérification Playwright. Open Design les livre sous forme de bibliothèque organisée pour vous éviter la configuration projet par projet."}, {"name": "Open Design est-il affilié à OpenAI ?", "text": "Non. Codex est un produit d’OpenAI ; Open Design est un projet open source indépendant qui le prend en charge comme adaptateur de première partie. OpenAI et Codex sont des marques d’OpenAI."}, {"name": "Mes fichiers et identifiants sont-ils en sécurité ?", "text": "Oui — Open Design est local-first. Vos fichiers, artefacts et DESIGN.md restent dans votre propre dépôt, et vos identifiants OpenAI sont utilisés directement par votre agent, jamais routés via les serveurs d’Open Design."}], "ctaTitle": "Concevez avec Codex, à la manière ouverte.", "ctaBody": "Apportez votre propre clé OpenAI, gardez chaque fichier en local et obtenez une bibliothèque de design organisée autour de l’agent que vous utilisez déjà.", "ctaActions": [{"label": "Utiliser Codex dans Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Star sur GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Télécharger l’application desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Voir tous les agents pris en charge"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor pour les designers — Open Design", + description: "Comment les designers utilisent Cursor pour le design d’interfaces et de sites web — le Design Mode, Figma-vers-code, le Figma MCP — et comment Open Design en fait un agent de design open source et local-first.", + breadcrumb: "Cursor", + label: "Agent · Cursor", + heading: "Cursor pour les designers.", + lead: "Cursor est l’éditeur de code IA, désormais doté d’un Design Mode visuel. Les designers l’utilisent pour modifier l’UI en pointant et en dessinant, et pour transformer Figma en code. Open Design branche Cursor Agent sur un workflow de design open source qui garde vos fichiers en local.", + rich: {"heroCtaLead": "Open Design transforme Cursor en un agent de design open source et local-first — votre compte Cursor ou vos clés de modèle, vos fichiers, et autour, une bibliothèque organisée de skills et de design systems.", "heroCtaActions": [{"label": "Utiliser Cursor dans Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Star sur GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Télécharger l’application desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor est l’éditeur de code IA-first qui a fait de « construire et regarder le rendu » la façon par défaut de livrer de l’UI. Avec le mode Agent, les éditions inline, un aperçu intégré à l’éditeur et Figma via MCP, il est devenu un véritable outil de design — à condition de lui donner les bonnes références, les bonnes règles et une boucle de vérification. Voici un guide pratique et complet pour utiliser Cursor dans un travail d’UI, de frontend et de design system, et pour l’intégrer à un workflow de design structuré avec Open Design.", "Il couvre ce qu’est réellement Cursor, pourquoi sa boucle serrée d’itération est bonne pour le design, comment le configurer à partir de zéro, la boucle capture-et-aperçu-vers-UI, l’aller-retour Figma via MCP, sa comparaison avec Codex et Claude Code, les pièges qui rendent les sorties d’IA génériques, et comment Open Design comble l’écart en tant que couche de design ouverte et local-first."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Convergence de design avec Cursor : l’éditeur à gauche, un hub organisé de skills et de design systems au centre avec la marque Cursor au milieu, et une UI rendue à droite", "caption": "L’idée centrale : Cursor modifie et affiche l’UI dans l’éditeur, tandis qu’un hub de design organisé lui fournit le système, les skills et les références qui font paraître les sorties intentionnelles."}, "tocLabel": "Sur cette page", "toc": [{"id": "what-is-cursor", "label": "Ce qu’est réellement Cursor"}, {"id": "why-design", "label": "Pourquoi Cursor est bon en design"}, {"id": "setup", "label": "Configurer Cursor pour le design (à partir de zéro)"}, {"id": "preview-workflow", "label": "Le workflow aperçu-vers-UI"}, {"id": "figma", "label": "Cursor + Figma via MCP"}, {"id": "vs", "label": "Cursor vs Codex vs Claude Code"}, {"id": "pitfalls", "label": "Les pièges et le rendu « AI slop »"}, {"id": "open-design", "label": "Concevoir avec Cursor dans Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-cursor", "heading": "Ce qu’est réellement Cursor", "blocks": [{"kind": "p", "text": "Cursor est un éditeur de code IA-first conçu par Anysphere. C’est un fork de VS Code, il conserve donc l’éditeur, les extensions et les raccourcis clavier familiers, mais reconstruit le workflow autour d’un agent IA capable de lire tout votre projet, de modifier plusieurs fichiers, d’exécuter des commandes et d’itérer avec vous dans la boucle."}, {"kind": "p", "text": "Pour le travail de design, les surfaces importantes sont le mode Agent (vous décrivez un résultat et Cursor planifie et modifie à travers les fichiers), les éditions inline et les complétions Tab pour des ajustements rapides, un aperçu / navigateur intégré à l’éditeur pour voir l’UI en cours d’exécution sans quitter la fenêtre, et le support MCP qui lui permet d’intégrer du contexte externe comme un fichier Figma en direct."}, {"kind": "steps", "items": [{"label": "Règles de projet", "body": "Cursor lit des fichiers d’instructions de projet — des règles `.mdc` versionnées sous `.cursor/rules`, et un simple `AGENTS.md` — pour que vous puissiez encoder vos conventions de design là où l’agent les lit à chaque exécution."}, {"label": "Modèles", "body": "Cursor est flexible côté modèles : il est livré avec des modèles de pointe via votre abonnement et prend aussi en charge l’apport de vos propres clés de modèle, vous choisissez donc le moteur derrière le même workflow d’éditeur."}, {"label": "MCP", "body": "Il parle le Model Context Protocol, de sorte que des serveurs externes — le plus pertinent étant le serveur Figma MCP — deviennent un contexte de premier ordre pour l’agent."}]}, {"kind": "ul", "items": ["Éditeur : Anysphere", "Identifiant : compte / abonnement Cursor (Hobby / Pro / Business) ou vos propres clés de modèle (BYOK)", "Forme : éditeur de code IA-first (fork de VS Code) avec un agent et un aperçu intégrés à l’éditeur"]}]}, {"id": "why-design", "heading": "Pourquoi Cursor est bon en design", "blocks": [{"kind": "p", "text": "L’avantage de Cursor en design n’est pas une fonctionnalité unique — c’est la rapidité de la boucle construire-et-voir. Trois choses le font ressembler à un outil de design plutôt qu’à un générateur de code générique."}, {"kind": "steps", "items": [{"label": "Une boucle d’itération serrée", "body": "Vous donnez un prompt, Cursor modifie à travers les fichiers, et l’aperçu intégré à l’éditeur affiche le résultat immédiatement — vous ajustez ainsi l’espacement, la hiérarchie et le mouvement en quelques secondes au lieu de faire des allers-retours entre un terminal et un navigateur séparés."}, {"label": "L’édition visuelle directe", "body": "Au-delà du chat, Cursor vous laisse sélectionner des éléments dans l’aperçu et ajuster les styles, de sorte que les petites corrections visuelles ressemblent à des éditions de design plutôt qu’à de l’archéologie de code."}, {"label": "Règles de projet et contexte MCP", "body": "Avec `.cursor/rules` (ou `AGENTS.md`) et le serveur Figma MCP, l’agent travaille par rapport à vos tokens, composants et vraies specs de design au lieu de deviner."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Schéma montrant un design system, une skill et une image de référence convergeant vers une bonne sortie de design", "caption": "Le goût vient de trois entrées que vous fournissez : un design system, une skill et de vraies images de référence."}, {"kind": "p", "text": "La leçon est la même que celle que tout agent enseigne : Cursor n’a pas de goût par défaut. Il produit de bons designs quand vous lui donnez des contraintes — un design system, une skill esthétique et des références concrètes. Open Design empaquette précisément ces entrées, et c’est pourquoi les deux s’accordent (plus de détails ci-dessous)."}]}, {"id": "setup", "heading": "Configurer Cursor pour le design, à partir de zéro", "blocks": [{"kind": "p", "text": "Voici le parcours complet, d’une machine vierge à un Cursor capable de construire, prévisualiser et vérifier l’UI par rapport à votre design system."}, {"kind": "ol", "items": ["Installez Cursor depuis cursor.com et connectez-vous avec votre compte Cursor, ou configurez vos propres clés de modèle (BYOK) dans les Réglages.", "Ouvrez votre projet et choisissez un modèle dans le panneau chat / Agent.", "Ajoutez des règles de projet : créez `.cursor/rules/*.mdc` pour des conventions structurées et délimitées par glob, ou un simple `AGENTS.md` pour des instructions simples et lisibles.", "Connectez le serveur Figma MCP (optionnel) pour que l’agent puisse lire le contexte de design en direct.", "Faites tourner votre serveur de dev et utilisez l’aperçu intégré à l’éditeur pour voir et vérifier l’UI au fil de vos itérations."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Flux de configuration en cinq étapes : installer, authentifier, configurer les règles, ajouter une skill, vérifier", "caption": "La séquence de configuration : installer → authentifier → configurer les règles de projet → ajouter une skill → activer la vérification par aperçu."}, {"kind": "p", "text": "Un fichier de règles de projet minimal amène l’agent à concevoir pour une marque au lieu de retomber sur un rendu générique. Placez-le là où Cursor le lit à chaque exécution :"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Encodez vos règles de design", "body": "Mettez vos tokens, primitives et conventions dans `.cursor/rules` ou `AGENTS.md` et orientez Cursor vers eux, pour que les sorties correspondent à une marque au lieu de retomber sur un rendu générique."}, {"label": "Gardez des prompts courts", "body": "La boucle serrée de Cursor récompense les demandes ciblées — itérez un composant ou un état à la fois et observez l’aperçu entre chaque passe."}]}]}, {"id": "preview-workflow", "heading": "Le workflow aperçu-vers-UI", "blocks": [{"kind": "p", "text": "La boucle de design la plus efficace avec Cursor consiste à transformer une référence en une UI fonctionnelle et responsive, puis à itérer dans l’éditeur jusqu’à ce qu’elle corresponde — en observant l’aperçu en direct tout du long au lieu de deviner."}, {"kind": "ol", "items": ["Partez des références visuelles les plus claires dont vous disposez — et incluez plusieurs états (desktop et mobile, survol, vide, chargement), pas seulement un visuel héros.", "Soyez précis dans le prompt ; des prompts vagues produisent une UI générique.", "Préparez un design system et indiquez à Cursor où se trouvent les tokens et les primitives canoniques.", "Gardez l’aperçu intégré à l’éditeur ouvert et votre serveur de dev en route pour que chaque édition s’affiche immédiatement aux breakpoints qui vous importent.", "Itérez en comparant l’UI rendue avec les références — et utilisez la sélection directe d’éléments dans l’aperçu pour les petites corrections visuelles."]}, {"kind": "p", "text": "Fournissez les références en attachant une image au chat, puis formulez le prompt avec des contraintes concrètes :"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Committez les bonnes itérations et annulez les mauvaises (en prévenant Cursor quand vous revenez en arrière) pour que chaque passe parte d’une base propre — la même discipline qui empêche toute boucle d’agent de dériver."}]}, {"id": "figma", "heading": "Cursor + Figma : design ↔ code via MCP", "blocks": [{"kind": "p", "text": "Cursor se connecte à Figma via le serveur Figma MCP officiel, qui donne à l’agent un accès structuré à un fichier Figma en direct au lieu d’une capture à plat. Cela retire le tâtonnement du handoff."}, {"kind": "steps", "items": [{"label": "Design → Code", "body": "Copiez le lien d’une frame dans Figma, collez-le dans Cursor et demandez-lui d’implémenter la maquette. Le serveur MCP expose un vrai contexte de design — composants, variables, données de mise en page, tokens — pour que le code généré corresponde à la source au lieu de l’approximer."}, {"label": "Restez aligné", "body": "Avec des design tokens, des styles et des composants utilisés de manière cohérente dans Figma (et Code Connect là où c’est disponible), les sorties de Cursor restent mappées sur votre vrai design system plutôt que de réinventer des primitives."}]}, {"kind": "p", "text": "Configurez le serveur Figma MCP distant une fois et il est disponible pour Cursor en tant que contexte de premier ordre. Comme MCP est un standard ouvert, le même serveur est réutilisable à travers Cursor, Claude Code, Codex et VS Code — exactement le genre de capacité portable et multi-agent qu’Open Design est conçu pour orchestrer."}]}, {"id": "vs", "heading": "Cursor vs Codex vs Claude Code pour le design", "blocks": [{"kind": "p", "text": "Il n’y a pas de vainqueur unique pour le travail de design — chaque agent a une force différente, et les équipes expérimentées les combinent. Un résumé équilibré :"}, {"kind": "table", "columns": ["Agent", "Force en design", "Idéal pour"], "rows": [["Cursor", "Boucle visuelle construire-et-voir avec aperçu en direct dans l’éditeur et édition directe des éléments", "Le travail d’UI en boucle serrée d’itération au sein d’un IDE"], ["Codex", "Forte finition visuelle avec une skill frontend ; compréhension d’images et exécutions en sandbox", "Les builds async délégués et les règles AGENTS.md portables"], ["Claude Code", "Décisions de design précises (hex, espacement, typographie) et UX consciente de la base de code", "Le raisonnement frontend et les refactors à large contexte"]]}, {"kind": "p", "text": "Le verdict récurrent de la communauté est que le goût vient des humains : les trois retombent sur une esthétique générique sans skills, références et contraintes. C’est le vrai problème à résoudre — et il a la forme d’un outil de design, pas d’un modèle."}]}, {"id": "pitfalls", "heading": "Les pièges, et comment éviter le rendu « AI slop »", "blocks": [{"kind": "p", "text": "La critique la plus fréquente à l’égard du design généré par Cursor est qu’il a l’air générique — dégradés doux, panneaux flottants, coins arrondis surdimensionnés, ombres spectaculaires, une ambiance Inter-et-violet qui « crie qu’une IA a fait ça ». Parmi les autres problèmes signalés : des mises en page qui cassent sur mobile et des instructions qui fuient dans les textes de l’UI."}, {"kind": "steps", "items": [{"label": "Ajoutez une skill de design", "body": "Une skill esthétique organisée force Cursor à s’engager sur une vraie direction au lieu du rendu par défaut."}, {"label": "Utilisez l’aperçu pour vérifier", "body": "Rendez et auto-contrôlez sur les différents breakpoints dans l’aperçu intégré à l’éditeur pour que les mises en page ne cassent pas en silence sur mobile."}, {"label": "Fournissez tokens et références", "body": "De vrais tokens de design et des captures de référence sont le plus grand levier sur la qualité des sorties."}, {"label": "Encodez les règles dans `.cursor/rules`", "body": "Mettez des règles de style comme « pas de hero cards, deux familles typographiques au maximum, hiérarchie qui met la marque d’abord » là où l’agent les lit à chaque exécution."}]}, {"kind": "p", "text": "Remarquez que chaque parade revient à donner à l’agent un contexte de design organisé. Maintenir ce contexte à la main, projet par projet, est le labeur qu’Open Design supprime."}]}, {"id": "open-design", "heading": "Concevoir avec Cursor dans Open Design", "blocks": [{"kind": "p", "text": "Open Design est la couche de design open source que le workflow ci-dessus ne cesse de réclamer. Il traite Cursor comme un adaptateur de première partie et l’entoure d’une bibliothèque organisée de skills et de design systems, d’un pipeline de rendu structuré et d’une UI desktop locale — pour que le contexte de design qui rend Cursor bon soit présent dès la première exécution, et non assemblé à la main à chaque fois."}, {"kind": "ol", "items": ["Installez Open Design et sélectionnez Cursor comme agent.", "Authentifiez-vous avec votre compte Cursor ou vos propres clés de modèle (BYOK) — les identifiants restent sur votre machine et ne transitent jamais par nos serveurs.", "Choisissez un design system et une skill, puis générez des decks, des prototypes et des landing pages avec un goût cohérent.", "Chaque artefact et fichier DESIGN.md vit dans votre propre dépôt, pas dans un cloud hébergé."]}, {"kind": "p", "text": "Le même agent Cursor, la même clé — auxquels s’ajoute un véritable workflow de design open source, portable, autour de lui. C’est local-first et Apache-2.0, donc rien de votre travail ni de vos identifiants ne quitte votre machine."}]}], "faqTitle": "Questions fréquentes", "faq": [{"name": "Cursor peut-il vraiment faire du travail de design ?", "text": "Oui — avec une skill de design, un design system et de vraies images de référence dans le contexte, Cursor produit une UI responsive de qualité production, et son aperçu intégré à l’éditeur vous laisse la vérifier et l’affiner visuellement. Sans ce contexte, il a tendance à retomber sur un rendu générique, et c’est l’écart que comble Open Design."}, {"name": "Est-ce un produit officiel de Cursor ?", "text": "Non. Open Design est un projet open source indépendant qui intègre Cursor comme agent. Il complète Cursor avec une bibliothèque de skills et de design systems ouverte et local-first."}, {"name": "Ai-je besoin d’un abonnement Cursor pour concevoir avec Cursor ?", "text": "Vous pouvez utiliser un compte / abonnement Cursor ou apporter vos propres clés de modèle (BYOK). Open Design ne fait jamais transiter vos identifiants, dans les deux cas — ils sont utilisés directement par votre agent."}, {"name": "Cursor ou Claude Code pour le design frontend ?", "text": "Les deux sont solides. Claude Code est reconnu pour ses décisions de design précises et conscientes de la base de code ; l’avantage de Cursor est sa boucle serrée construire-et-voir avec un aperçu en direct au sein de l’éditeur. Beaucoup d’équipes utilisent les deux — Open Design vous laisse changer d’agent sans changer votre workflow de design."}, {"name": "Comment connecter Cursor à Figma ?", "text": "Ajoutez le serveur Figma MCP officiel dans Cursor, puis collez un lien de frame Figma dans le chat et demandez à Cursor de l’implémenter. Le serveur expose de vrais composants, variables et données de mise en page pour que le code généré corresponde à la maquette source."}, {"name": "Comment éviter l’esthétique générique « AI slop » ?", "text": "Ajoutez une skill de design, fournissez de vrais tokens de design et des captures de référence, encodez les règles de marque dans `.cursor/rules` ou `AGENTS.md`, et vérifiez sur les différents breakpoints dans l’aperçu. Open Design les livre sous forme de bibliothèque organisée pour vous éviter la configuration projet par projet."}, {"name": "Open Design est-il affilié à Cursor ou Anysphere ?", "text": "Non. Cursor est un produit d’Anysphere ; Open Design est un projet open source indépendant qui le prend en charge comme adaptateur de première partie. Cursor et Anysphere sont des marques d’Anysphere, Inc."}, {"name": "Mes fichiers et identifiants sont-ils en sécurité ?", "text": "Oui — Open Design est local-first. Vos fichiers, artefacts et DESIGN.md restent dans votre propre dépôt, et vos identifiants Cursor ou de modèle sont utilisés directement par votre agent, jamais routés via les serveurs d’Open Design."}], "ctaTitle": "Concevez avec Cursor, à la manière ouverte.", "ctaBody": "Apportez votre propre compte Cursor ou vos clés de modèle, gardez chaque fichier en local et obtenez une bibliothèque de design organisée autour de l’agent que vous utilisez déjà.", "ctaActions": [{"label": "Utiliser Cursor dans Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Star sur GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Télécharger l’application desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Voir tous les agents pris en charge"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode pour le design — Open Design", + description: "Comment on utilise OpenCode pour le design d’interfaces et de sites web — les fichiers design.md, les skills UI/UX, le Figma MCP — et comment Open Design en fait un agent de design open source et local-first.", + breadcrumb: "OpenCode", + label: "Agent · OpenCode", + heading: "OpenCode pour le design.", + lead: "OpenCode est l’agent de code IA en terminal, open source. Les designers lui ajoutent des skills de design et des fichiers DESIGN.md pour générer de vraies UI. Open Design en fait un workflow structuré et open source — apportez vos clés de fournisseur, gardez tout en local.", + rich: {"heroCtaLead": "Open Design transforme OpenCode en un agent de design open source et local-first — n’importe quel modèle de votre choix avec votre propre clé de fournisseur, vos fichiers, et autour, une bibliothèque organisée de skills et de design systems.", "heroCtaActions": [{"label": "Utiliser OpenCode dans Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Star sur GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Télécharger l’application desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode est un agent de code IA open source, pensé d’abord pour le terminal et délibérément agnostique au modèle : vous apportez votre propre clé de fournisseur et exécutez le modèle de votre choix derrière le même workflow. Cette ouverture en fait une base naturelle pour le travail de design — mais, comme tout agent, il ne produit de bonnes UI que si vous lui donnez les bonnes références, les bonnes skills et une boucle de vérification. Voici un guide pratique et complet pour utiliser OpenCode dans un travail d’UI, de frontend et de design system, et pour l’intégrer à un workflow de design structuré avec Open Design.", "Il couvre ce qu’est réellement OpenCode, pourquoi un agent ouvert et agnostique au modèle convient au design, comment le configurer à partir de zéro, la boucle capture-vers-UI, comment AGENTS.md et MCP l’étendent, sa comparaison avec Codex, Claude Code et Cursor, les pièges qui rendent les sorties d’IA génériques, et comment Open Design comble l’écart en tant que couche de design ouverte et local-first — un appariement naturel, puisque les deux projets sont open source et s’exécutent sur votre propre machine."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "Boucle de rétroaction de design avec OpenCode : un agent TUI en terminal, un navigateur affichant l’UI et un espace de travail, avec une flèche de rétroaction qui boucle", "caption": "La boucle centrale : OpenCode construit l’UI dans le terminal, la rend et la vérifie dans un vrai navigateur, et itère par rapport à vos références — sur le modèle de votre choix."}, "tocLabel": "Sur cette page", "toc": [{"id": "what-is-opencode", "label": "Ce qu’est réellement OpenCode"}, {"id": "why-design", "label": "Pourquoi un agent ouvert et tout-modèle convient au design"}, {"id": "setup", "label": "Configurer OpenCode pour le design (à partir de zéro)"}, {"id": "screenshot-workflow", "label": "Le workflow capture-vers-UI"}, {"id": "extend", "label": "AGENTS.md, MCP et sessions partageables"}, {"id": "vs", "label": "OpenCode vs Codex vs Claude Code vs Cursor"}, {"id": "pitfalls", "label": "Les pièges et le rendu « AI slop »"}, {"id": "open-design", "label": "Concevoir avec OpenCode dans Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-opencode", "heading": "Ce qu’est réellement OpenCode", "blocks": [{"kind": "p", "text": "OpenCode est un agent de code IA open source conçu pour le terminal, maintenu par l’équipe derrière SST (Anomaly Innovations). Il lit votre dépôt, exécute des commandes, modifie des fichiers et dialogue avec un grand modèle de langage — mais, contrairement aux agents liés à un éditeur, il ne fournit pas son propre modèle. Vous le pointez vers le fournisseur et le modèle de votre choix et apportez votre propre clé."}, {"kind": "p", "text": "Il s’exécute comme une UI en terminal (TUI), avec une application desktop et des extensions IDE par-dessus le même moteur. Sous le capot, il utilise une architecture client/serveur, de sorte que l’agent qui fait le travail est découplé de la surface depuis laquelle vous le pilotez. Deux agents intégrés — build et plan — se basculent avec la touche Tab."}, {"kind": "steps", "items": [{"label": "Agnostique au modèle", "body": "Les modèles et fournisseurs proviennent de models.dev, un catalogue ouvert. Vous les configurez dans opencode.json avec une chaîne provider/model-id et pouvez désactiver les fournisseurs que vous ne voulez pas charger — le même workflow de design s’exécute ainsi sur Anthropic, OpenAI, Google, OpenRouter, des modèles locaux et plus encore."}, {"label": "Fichier d’instructions", "body": "OpenCode lit un fichier AGENTS.md dans votre projet (le standard inter-outils, également compatible avec CLAUDE.md) pour les règles de projet — l’endroit naturel pour encoder vos conventions de design. Exécutez /init pour en générer un."}, {"label": "Extensible", "body": "Il prend en charge l’intégration LSP, les serveurs MCP, les thèmes, les raccourcis clavier et les commandes personnalisées, ainsi que des liens de session partageables pour la collaboration."}]}, {"kind": "ul", "items": ["Mainteneur : SST / Anomaly Innovations (projet open source)", "Identifiant : votre/vos propre(s) clé(s) API de fournisseur de modèle — BYOK, sans verrouillage par l’éditeur", "Licence : MIT, open source"]}]}, {"id": "why-design", "heading": "Pourquoi un agent ouvert et tout-modèle convient au travail de design", "blocks": [{"kind": "p", "text": "OpenCode n’a pas un unique « modèle de design » comme en a un agent d’éditeur — et c’est tout l’intérêt. Parce qu’il est agnostique au modèle et ouvert, vous pouvez exécuter le même workflow de design sur le modèle actuellement le meilleur en frontend, en changer plus tard, ou vous rabattre sur un modèle local, le tout sans modifier votre configuration."}, {"kind": "p", "text": "Mais le choix du modèle seul n’achète pas le goût. Comme tout agent de code, OpenCode produit une UI générique tant que vous ne lui donnez pas de contraintes. Une bonne sortie de design provient de trois entrées que vous fournissez."}, {"kind": "steps", "items": [{"label": "Un design system", "body": "De vrais tokens, primitives et conventions que l’agent réutilise, pour que les sorties correspondent à une marque au lieu de retomber sur un rendu générique."}, {"label": "Une skill esthétique", "body": "Une skill organisée qui impose un vrai goût — mouvement sobre, hiérarchie qui met la marque d’abord, deux familles typographiques et une couleur d’accent au maximum — et amène l’agent à s’engager sur une direction avant de construire."}, {"label": "Des références concrètes", "body": "De vraies images de référence et plusieurs états (desktop et mobile, survol, vide, chargement), pas un unique visuel héros."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Schéma montrant un design system, une skill et une image de référence convergeant vers une bonne sortie de design", "caption": "Le goût vient de trois entrées que vous fournissez : un design system, une skill et de vraies images de référence — indépendamment du modèle que vous exécutez."}, {"kind": "p", "text": "La leçon : OpenCode vous donne la liberté du modèle, mais le goût vient toujours d’un contexte de design organisé. Open Design empaquette précisément ces entrées, et c’est pourquoi les deux s’accordent — tous deux sont open source et local-first (plus de détails ci-dessous)."}]}, {"id": "setup", "heading": "Configurer OpenCode pour le design, à partir de zéro", "blocks": [{"kind": "p", "text": "Voici le parcours complet, d’une machine vierge à un OpenCode capable de construire et de vérifier des UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Flux de configuration en cinq étapes : installer, authentifier avec votre clé de fournisseur, configurer AGENTS.md, ajouter une skill, vérifier", "caption": "La séquence de configuration : installer → authentifier (votre clé de fournisseur) → configurer AGENTS.md → ajouter une skill → vérifier dans un vrai navigateur."}, {"kind": "steps", "items": [{"label": "Encodez vos règles de design", "body": "Mettez vos tokens, primitives et conventions dans AGENTS.md (ou un DESIGN.md référencé depuis lui) pour que les sorties correspondent à une marque au lieu de retomber sur un rendu générique. L’option instructions dans opencode.json peut pointer vers des fichiers de règles supplémentaires via des globs."}, {"label": "Choisissez un modèle capable", "body": "Parce qu’OpenCode est agnostique au modèle, choisissez le fournisseur/modèle actuellement le plus fort en frontend pour la passe de design — et gardez le reste de votre workflow inchangé."}]}]}, {"id": "screenshot-workflow", "heading": "Le workflow capture-vers-UI", "blocks": [{"kind": "p", "text": "La boucle de design la plus efficace avec n’importe quel agent consiste à transformer une image de référence en une UI fonctionnelle et responsive, puis à itérer jusqu’à ce qu’elle corresponde. La même structure en cinq étapes s’applique dans OpenCode."}, {"kind": "ol", "items": ["Partez des références visuelles les plus claires dont vous disposez — et incluez plusieurs états (desktop et mobile, survol, vide, chargement), pas seulement un visuel héros.", "Soyez précis dans le prompt ; des prompts vagues produisent une UI générique.", "Préparez un design system et indiquez à OpenCode où se trouvent les tokens et les primitives canoniques (dans AGENTS.md).", "Faites tourner un serveur de dev et faites rendre l’agent dans un vrai navigateur, en redimensionnant aux breakpoints pour contrôler le résultat.", "Itérez en faisant comparer à OpenCode son implémentation avec les captures — au lieu de simplement confirmer que ça build."]}, {"kind": "p", "text": "Référencez des fichiers avec @ dans le TUI pour une recherche floue de votre répertoire de travail, exécutez des commandes shell en ligne avec un ! en tête, et déclenchez des actions avec les commandes /. Puis formulez le prompt avec des contraintes concrètes :"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Gardez des prompts courts et ciblés, committez les bonnes itérations et annulez les mauvaises (en prévenant OpenCode quand vous revenez en arrière), pour que chaque passe parte d’une base propre."}]}, {"id": "extend", "heading": "AGENTS.md, MCP et sessions partageables", "blocks": [{"kind": "p", "text": "Trois points d’extension rendent OpenCode pratique pour un travail de design durable, et tous trois se projettent proprement sur un workflow de design ouvert."}, {"kind": "steps", "items": [{"label": "Règles AGENTS.md", "body": "Les règles de projet vivent dans un AGENTS.md à la racine du dépôt (ou des règles globales dans ~/.config/opencode/AGENTS.md). C’est le foyer durable de vos conventions de design, lu à chaque exécution, et il est compatible avec les fichiers CLAUDE.md qu’utilisent d’autres agents."}, {"label": "Serveurs MCP", "body": "OpenCode prend en charge à la fois les serveurs MCP locaux (command) et distants (URL), configurés sous la clé mcp — la façon portable d’apporter du contexte de design et des outils externes qui fonctionnent à travers les agents, pas seulement OpenCode."}, {"label": "Sessions partageables", "body": "La commande /share crée un lien public vers une conversation pour la collaboration ou la revue, et /unshare le révoque — utile pour obtenir des retours sur une passe de design."}]}, {"kind": "p", "text": "Ce sont des capacités portables et multi-agent — exactement le genre de chose qu’Open Design est conçu pour orchestrer, plutôt que de recréer projet par projet."}]}, {"id": "vs", "heading": "OpenCode vs Codex vs Claude Code vs Cursor pour le design", "blocks": [{"kind": "p", "text": "Il n’y a pas de vainqueur unique pour le travail de design — chaque agent a une force différente, et les équipes expérimentées les combinent. Un résumé équilibré :"}, {"kind": "table", "columns": ["Agent", "Force en design", "Idéal pour"], "rows": [["OpenCode", "Open source et agnostique au modèle ; exécutez n’importe quel fournisseur derrière un seul workflow en terminal", "La liberté BYOK, le changement de modèle, les configurations entièrement ouvertes et local-first"], ["Codex", "Forte finition visuelle avec une skill frontend ; compréhension d’images", "L’async délégué, les builds en sandbox, les règles AGENTS.md portables"], ["Claude Code", "Décisions de design précises (hex, espacement, typographie) et UX consciente de la base de code", "Le raisonnement frontend et les refactors à large contexte"], ["Cursor", "Boucle visuelle construire-et-voir avec aperçu en direct et éditions inline", "Le travail d’UI en boucle serrée d’itération au sein d’un IDE"]]}, {"kind": "p", "text": "Le verdict récurrent de la communauté est que le goût vient des humains : tous retombent sur une esthétique générique sans skills, références et contraintes. C’est le vrai problème à résoudre — et il a la forme d’un outil de design, pas d’un modèle, ce qui est précisément pourquoi un agent ouvert comme OpenCode s’accorde si bien avec une couche de design ouverte."}]}, {"id": "pitfalls", "heading": "Les pièges, et comment éviter le rendu « AI slop »", "blocks": [{"kind": "p", "text": "La critique la plus fréquente à l’égard du design généré par IA est qu’il a l’air générique — dégradés doux, panneaux flottants, coins arrondis surdimensionnés, ombres spectaculaires, une ambiance Inter-et-violet qui « crie qu’une IA a fait ça ». Parmi les autres problèmes signalés : des mises en page mobiles cassées et des instructions qui fuient dans les textes de l’UI. Aucun de ces problèmes n’est propre à OpenCode ; c’est ce qui arrive quand un agent, quel qu’il soit, s’exécute sans contexte de design organisé."}, {"kind": "steps", "items": [{"label": "Ajoutez une skill esthétique", "body": "Une skill de design organisée force l’agent à s’engager sur une vraie direction au lieu du rendu par défaut."}, {"label": "Vérifiez dans un vrai navigateur", "body": "Rendez et auto-contrôlez sur les différents breakpoints pour que les mises en page ne cassent pas en silence sur mobile."}, {"label": "Fournissez tokens et références", "body": "De vrais tokens de design et des captures de référence sont le plus grand levier sur la qualité des sorties."}, {"label": "Encodez les règles dans AGENTS.md", "body": "Mettez des règles de style comme « pas de hero cards, deux familles typographiques au maximum, hiérarchie qui met la marque d’abord » là où l’agent les lit à chaque exécution."}]}, {"kind": "p", "text": "Remarquez que chaque parade revient à donner à l’agent un contexte de design organisé — quel que soit le modèle que vous exécutez. Maintenir ce contexte à la main, projet par projet, est le labeur qu’Open Design supprime."}]}, {"id": "open-design", "heading": "Concevoir avec OpenCode dans Open Design", "blocks": [{"kind": "p", "text": "Open Design est la couche de design open source que le workflow ci-dessus ne cesse de réclamer. Il traite OpenCode comme un adaptateur de première partie et l’entoure d’une bibliothèque organisée de skills et de design systems, d’un pipeline de rendu structuré et d’une UI desktop locale — pour que le contexte de design qui rend tout agent bon soit présent dès la première exécution, et non assemblé à la main à chaque fois. Les deux projets sont open source et local-first, ce qui rend l’appariement naturel."}, {"kind": "ol", "items": ["Installez Open Design et sélectionnez OpenCode comme agent.", "Authentifiez-vous avec votre propre clé API de fournisseur de modèle (BYOK) — les identifiants restent sur votre machine et ne transitent jamais par nos serveurs.", "Choisissez n’importe quel fournisseur et modèle, plus un design system et une skill, puis générez des decks, des prototypes et des landing pages avec un goût cohérent.", "Chaque artefact et fichier DESIGN.md vit dans votre propre dépôt, pas dans un cloud hébergé."]}, {"kind": "p", "text": "Le même agent OpenCode, la même liberté de modèle — auxquels s’ajoute un véritable workflow de design open source, portable, autour de lui. C’est local-first et Apache-2.0, donc rien de votre travail ni de vos identifiants ne quitte votre machine."}]}], "faqTitle": "Questions fréquentes", "faq": [{"name": "OpenCode peut-il vraiment faire du travail de design ?", "text": "Oui — avec une skill esthétique, un design system et de vraies images de référence dans le contexte, OpenCode produit une UI responsive de qualité production et peut la vérifier dans un navigateur. Parce qu’il est agnostique au modèle, vous exécutez celui qui est actuellement le meilleur en frontend. Sans ce contexte organisé, il a tendance à retomber sur un rendu générique, et c’est l’écart que comble Open Design."}, {"name": "Quel modèle utiliser avec OpenCode pour le design ?", "text": "Celui que vous voulez — OpenCode est agnostique au fournisseur via models.dev, vous pouvez donc exécuter Anthropic, OpenAI, Google, OpenRouter ou des modèles locaux derrière le même workflow et en changer à tout moment. La qualité de la sortie de design dépend bien plus de votre skill, de votre design system et de vos références que du modèle seul."}, {"name": "Open Design est-il fait par l’équipe OpenCode (SST) ?", "text": "Non. Open Design est un projet open source indépendant qui intègre OpenCode comme agent. Il complète OpenCode avec une bibliothèque de skills et de design systems ouverte et local-first."}, {"name": "Ai-je besoin d’un abonnement spécial pour concevoir avec OpenCode ?", "text": "Non — OpenCode est BYOK. Vous apportez votre propre clé API de fournisseur de modèle, et Open Design ne fait jamais transiter vos identifiants. Il n’y a pas de verrouillage par l’éditeur."}, {"name": "OpenCode, Codex ou Claude Code pour le design frontend ?", "text": "Tous sont solides, et beaucoup d’équipes les combinent. L’avantage d’OpenCode est d’être entièrement open source et agnostique au modèle ; Codex excelle dans les builds délégués en sandbox ; Claude Code est reconnu pour ses décisions de design précises et conscientes de la base de code. Open Design vous laisse changer d’agent sans changer votre workflow de design."}, {"name": "Comment étendre OpenCode pour le contexte de design ?", "text": "Encodez les règles dans AGENTS.md, ajoutez des serveurs MCP sous la clé mcp pour des outils portables et du contexte de design, et utilisez les sessions partageables pour la revue. Open Design fournit une bibliothèque organisée de skills et de design systems pour vous éviter la configuration projet par projet."}, {"name": "Open Design est-il affilié à OpenCode ou SST ?", "text": "Non. OpenCode est un projet open source maintenu par SST (Anomaly Innovations) ; Open Design est un projet open source indépendant qui le prend en charge comme adaptateur de première partie."}, {"name": "Mes fichiers et identifiants sont-ils en sécurité ?", "text": "Oui — Open Design est local-first. Vos fichiers, artefacts et DESIGN.md restent dans votre propre dépôt, et vos identifiants de fournisseur de modèle sont utilisés directement par votre agent, jamais routés via les serveurs d’Open Design."}], "ctaTitle": "Concevez avec OpenCode, à la manière ouverte.", "ctaBody": "Apportez votre propre clé de fournisseur de modèle, gardez chaque fichier en local et obtenez une bibliothèque de design organisée autour de l’agent ouvert que vous utilisez déjà.", "ctaActions": [{"label": "Utiliser OpenCode dans Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Star sur GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Télécharger l’application desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Voir tous les agents pris en charge"}, + }, + }, + 'ru': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code для дизайна — Open Design", + description: "Как дизайнеры используют Claude Code для UI и веб-дизайна и как Open Design превращает его в полноценного дизайн-агента — local-first, BYOK, с курируемой библиотекой skill и дизайн-систем.", + breadcrumb: "Claude Code", + label: "Агент · Claude Code", + heading: "Claude Code для дизайна.", + lead: "Claude Code — это терминальный кодинг-агент от Anthropic. Им уже создают интерфейсы, дизайн-системы и лендинги. Open Design встраивает его в настоящий дизайн-процесс — используйте свой ключ Anthropic или подписку Claude и держите каждый файл локально.", + rich: {"heroCtaLead": "Open Design превращает Claude Code в local-first, open-source дизайн-агента — ваш ключ Anthropic или подписка Claude, ваши файлы и курируемая библиотека skill и дизайн-систем вокруг него.", "heroCtaActions": [{"label": "Использовать Claude Code в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставить звезду на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Скачать десктопное приложение", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code широко считается кодинг-агентом с лучшим вкусом во фронтенде — он рассуждает об интерфейсах с необычной точностью, называя конкретные значения hex, отступы и типографические шкалы, и рефакторит UI по большой кодовой базе, не теряя нить. Но «из коробки» он всё равно тяготеет к шаблонному виду, пока вы не дадите ему дизайн-систему, skills и реальные референсы. Это практичное, сквозное руководство по использованию Claude Code для UI, фронтенда и работы с дизайн-системами, а также по встраиванию его в структурированный процесс с Open Design.", "Оно охватывает то, чем на самом деле является Claude Code, почему он силён во фронтенде, как настроить его с нуля, рабочий процесс с CLAUDE.md и Skills, официальный round-trip с Figma, как он сравнивается с Codex и Cursor, какие подводные камни делают вывод ИИ шаблонным и как Open Design закрывает этот разрыв как открытый, local-first дизайн-слой."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Цикл обратной связи дизайна Claude Code: терминальный агент принимает конкретные дизайн-решения, браузер отрисовывает UI, рабочее пространство и стрелка обратной связи, замыкающая цикл", "caption": "Ключевой цикл: Claude Code обдумывает конкретные UI-решения в терминале, отрисовывает и проверяет их в настоящем браузере и сходится к вашим референсам."}, "tocLabel": "На этой странице", "toc": [{"id": "what-is-claude-code", "label": "Чем на самом деле является Claude Code"}, {"id": "why-design", "label": "Почему Claude Code хорош в дизайне"}, {"id": "setup", "label": "Настройка Claude Code для дизайна (с нуля)"}, {"id": "skills-workflow", "label": "Рабочий процесс с CLAUDE.md и Skills"}, {"id": "figma", "label": "Round-trip Claude Code + Figma"}, {"id": "vs", "label": "Claude Code против Codex против Cursor"}, {"id": "pitfalls", "label": "Подводные камни и вид «AI slop»"}, {"id": "open-design", "label": "Дизайн с Claude Code в Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-claude-code", "heading": "Чем на самом деле является Claude Code", "blocks": [{"kind": "p", "text": "Claude Code — это агентный инструмент для кодинга от Anthropic. Он читает вашу кодовую базу, редактирует файлы, выполняет команды и интегрируется с вашими инструментами разработки — планируя, создавая и проверяя работу по задачам на естественном языке, а не просто дополняя строки."}, {"kind": "p", "text": "Он поставляется в нескольких форматах, которые используют один и тот же движок: терминальный CLI, расширения IDE для VS Code, Cursor и JetBrains, десктопное приложение с визуальным просмотром диффов и веб-версия для долгих задач. Ваши файлы CLAUDE.md, настройки и серверы MCP переносятся между всеми ними."}, {"kind": "steps", "items": [{"label": "Файл инструкций", "body": "Claude Code читает файл CLAUDE.md в корне проекта в начале каждой сессии — естественное место, где можно зафиксировать ваши дизайн-конвенции, tokens и чек-листы ревью."}, {"label": "Skills", "body": "Agent Skills упаковывают повторяемые инструкции, скрипты и ресурсы, которые Claude подгружает по требованию, включая официальный Frontend Design skill от Anthropic для вкуса."}, {"label": "Планирование и субагенты", "body": "Он может планировать перед действием и порождать субагентов, которые работают над разными частями задачи параллельно, что сохраняет целостность крупных UI-рефакторингов."}]}, {"kind": "ul", "items": ["Поставщик: Anthropic", "Учётные данные: API-ключ Anthropic (BYOK, через Console) или подписка Claude (Pro / Max)", "Форматы: терминальный CLI, расширения VS Code / Cursor / JetBrains, десктопное приложение, веб"]}]}, {"id": "why-design", "heading": "Почему Claude Code хорош в дизайне", "blocks": [{"kind": "p", "text": "Среди кодинг-агентов Claude Code заслужил репутацию обладателя вкуса в работе над фронтендом. Это объясняется несколькими причинами."}, {"kind": "steps", "items": [{"label": "Конкретные, а не расплывчатые решения", "body": "Claude Code склонен принимать конкретные решения — точные значения hex, шкалы отступов, типографические шкалы и иерархию компонентов — вместо общих фраз, и именно это отличает настоящий интерфейс от заглушки."}, {"label": "Рассуждение с учётом кодовой базы", "body": "Имея большой рабочий контекст, он рефакторит UI сразу по множеству файлов, переиспользуя ваши существующие компоненты и tokens, а не изобретая разовые стили."}, {"label": "Официальный frontend skill", "body": "Anthropic поставляет Frontend Design skill, который заставляет Claude сначала задавать дизайн-направление и осознанно уходит от шаблонных системных шрифтов и предсказуемых фиолетовых градиентов."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Диаграмма, показывающая, как дизайн-система, skill и референсное изображение сходятся в хороший дизайн-результат", "caption": "Вкус рождается из трёх вводных, которые вы предоставляете: дизайн-системы, skill и реальных референсных изображений."}, {"kind": "p", "text": "Урок тот же, что Anthropic делает о своих моделях: у Claude по умолчанию нет вкуса — предоставленный сам себе, он сходится к статистическому центру веб-дизайна (Inter, фиолетовые градиенты, мягкие тени). Он создаёт хороший дизайн, когда вы даёте ему ограничения. Open Design упаковывает именно эти вводные, поэтому они так хорошо сочетаются (подробнее ниже)."}]}, {"id": "setup", "heading": "Настройка Claude Code для дизайна с нуля", "blocks": [{"kind": "p", "text": "Вот полный путь от чистой машины до Claude Code, способного создавать и проверять UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Пятишаговый процесс настройки: установка, аутентификация, настройка CLAUDE.md, добавление skill, проверка", "caption": "Последовательность настройки: установка → аутентификация → настройка CLAUDE.md → добавление Frontend Design skill → включение проверки в браузере."}, {"kind": "steps", "items": [{"label": "Зафиксируйте свои дизайн-правила", "body": "Поместите свои tokens, примитивы и конвенции в CLAUDE.md и направьте Claude к ним, чтобы вывод соответствовал бренду, а не сваливался в шаблонный вид."}, {"label": "Добавьте проверку в браузере", "body": "Подключите Playwright или Chrome MCP, чтобы Claude отрисовывал результат в настоящем браузере и проверял его на разных брейкпоинтах, а не просто подтверждал успешную сборку."}]}]}, {"id": "skills-workflow", "heading": "Рабочий процесс с CLAUDE.md и Skills", "blocks": [{"kind": "p", "text": "Самый эффективный дизайн-цикл с Claude Code — это давать ему реальные референсы вместе с вашим дизайн-контекстом, а затем итерировать, пока UI не совпадёт, при этом CLAUDE.md и Skills удерживают ограничения, чтобы не объяснять их заново в каждом промпте."}, {"kind": "ol", "items": ["Начинайте с самых ясных визуальных референсов, что у вас есть, — и включайте несколько состояний (десктоп и мобильный, hover, пустое, загрузка), а не только один hero-кадр.", "Будьте конкретны в промпте; расплывчатые промпты дают шаблонный UI даже с сильным агентом.", "Держите дизайн-систему и конвенции в CLAUDE.md и подсказывайте Claude, где лежат tokens и канонические примитивы.", "Добавьте Frontend Design skill, чтобы Claude задал реальное эстетическое направление до написания кода.", "Подключите проверку в браузере, чтобы Claude отрисовывал, менял размер до брейкпоинтов и сравнивал с референсами, а не просто подтверждал сборку."]}, {"kind": "p", "text": "Добавьте референсное изображение в сессию и задайте промпт с конкретными ограничениями:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Запускайте рядом dev-сервер, держите промпты короткими и сфокусированными и коммитьте удачные итерации / откатывайте неудачные (сообщая Claude об откате), чтобы каждый проход строился на чистой основе. Используйте режим планирования для крупных рефакторингов, чтобы пересмотреть подход до любых изменений в файлах."}]}, {"id": "figma", "heading": "Claude Code + Figma: round-trip дизайн ↔ код", "blocks": [{"kind": "p", "text": "В феврале 2026 года Anthropic и Figma выпустили первоклассную двунаправленную интеграцию через сервер Figma MCP. Она работает в обе стороны."}, {"kind": "steps", "items": [{"label": "Дизайн → Код", "body": "Выберите фрейм в Figma или вставьте ссылку в Claude Code, подтяните дизайн-контекст и попросите реализовать дизайн с использованием вашей существующей библиотеки компонентов. Code Connect удерживает вывод в соответствии с вашими реальными компонентами."}, {"label": "Код → Дизайн", "body": "Соберите и предпросмотрите фичу в браузере, затем скажите «Send this to Figma», чтобы зафиксировать работающий UI как редактируемые слои Figma — весь экран или выбранный элемент."}]}, {"kind": "p", "text": "Установите её один раз командой claude plugin install figma@claude-plugins-official (Dev Mode MCP требует платного плана Figma). Тот же Figma MCP доступен Claude Code, Codex, Cursor и VS Code — именно такая переносимая, мультиагентная возможность, которую Open Design создан оркестрировать."}]}, {"id": "vs", "heading": "Claude Code против Codex против Cursor для дизайна", "blocks": [{"kind": "p", "text": "Единого победителя в дизайн-работе нет — у каждого агента своя сильная сторона, и опытные команды комбинируют их. Честная сводка:"}, {"kind": "table", "columns": ["Агент", "Сила в дизайне", "Лучше всего для"], "rows": [["Claude Code", "Конкретные дизайн-решения (hex, отступы, типографика) и UX-рассуждение с учётом кодовой базы", "Фронтенд-рассуждения и рефакторинги с большим контекстом"], ["Codex", "Сильная визуальная отточенность и понимание изображений; асинхронные сборки в песочнице", "Делегированные асинхронные сборки и переносимые правила AGENTS.md"], ["Cursor", "Визуальный цикл «собери и посмотри» с живым предпросмотром и инлайн-правками", "Тесная работа над UI «итерируй и наблюдай» внутри IDE"]]}, {"kind": "p", "text": "Повторяющийся вердикт сообщества: вкус исходит от людей — все три по умолчанию сваливаются в шаблонную эстетику без skills, референсов и ограничений. Вот настоящая проблема, которую нужно решить — и она по форме относится к дизайн-инструменту, а не к модели."}]}, {"id": "pitfalls", "heading": "Подводные камни и как избежать вида «AI slop»", "blocks": [{"kind": "p", "text": "Даже при репутации Claude Code как обладателя вкуса самая частая жалоба на дизайн, сгенерированный ИИ, в том, что он выглядит шаблонно — шрифты Inter, фиолетовые градиенты на белом, мягкие тени, чрезмерно скруглённые углы, эстетика, которая «кричит, что это сделал ИИ». Сама Anthropic объясняет это сходимостью распределения: безопасные решения доминируют в обучающих данных веба. Среди других сообщаемых проблем — сломанные мобильные раскладки и инструкции, протекающие в текст UI."}, {"kind": "steps", "items": [{"label": "Установите Frontend Design skill", "body": "Он заставляет Claude задать реальное направление и явно избегает шрифтов и градиентов, чрезмерно используемых ИИ."}, {"label": "Включите проверку в браузере", "body": "Заставьте Claude отрисовывать и самопроверять результат на разных брейкпоинтах, чтобы раскладки не ломались незаметно на мобильном."}, {"label": "Предоставьте tokens и референсы", "body": "Реальные дизайн-tokens и референсные скриншоты — самый сильный рычаг для качества вывода."}, {"label": "Зафиксируйте правила в CLAUDE.md", "body": "Поместите правила вроде «без hero-карточек, максимум два шрифта, иерархия от бренда» туда, где агент читает их при каждом запуске."}]}, {"kind": "p", "text": "Обратите внимание: каждое из этих средств сводится к тому, чтобы дать агенту курируемый дизайн-контекст. Поддержка этого контекста вручную, для каждого проекта, — та рутина, которую устраняет Open Design."}]}, {"id": "open-design", "heading": "Дизайн с Claude Code внутри Open Design", "blocks": [{"kind": "p", "text": "Open Design — это тот open-source дизайн-слой, которого процесс выше постоянно требует. Он рассматривает Claude Code как нативный адаптер и оборачивает его в курируемую библиотеку skill и дизайн-систем, структурированный конвейер рендера и локальный десктопный UI — так что дизайн-контекст, делающий Claude Code хорошим, есть с первого запуска, а не собирается вручную каждый раз."}, {"kind": "ol", "items": ["Установите Open Design и выберите Claude Code как своего агента.", "Аутентифицируйтесь с помощью API-ключа Anthropic (BYOK) или подписки Claude — учётные данные остаются на вашей машине и никогда не проксируются через нас.", "Выберите дизайн-систему и skill, затем генерируйте презентации, прототипы и лендинги с единообразным вкусом.", "Каждый артефакт и файл DESIGN.md живёт в вашем собственном репозитории, а не в хостинговом облаке."]}, {"kind": "p", "text": "Тот же агент Claude Code, тот же ключ — плюс настоящий, переносимый, open-source дизайн-процесс вокруг него. Он local-first и под Apache-2.0, так что ничто из вашей работы или ваших учётных данных не покидает машину."}]}], "faqTitle": "Часто задаваемые вопросы", "faq": [{"name": "Хорош ли Claude Code для дизайн-работы?", "text": "Да — он широко считается кодинг-агентом с лучшим вкусом во фронтенде, принимая конкретные, учитывающие кодовую базу решения о значениях hex, отступах и типографических шкалах. С Frontend Design skill, дизайн-системой и реальными референсными изображениями в контексте он создаёт продакшен-качественный, адаптивный UI и может проверить его в браузере. Без такого контекста он склонен сваливаться в шаблонный вид — и именно этот разрыв закрывает Open Design."}, {"name": "Нужна ли подписка Claude, чтобы заниматься дизайном с Claude Code?", "text": "Вы можете использовать либо API-ключ Anthropic (BYOK, через Console), либо подписку Claude (Pro / Max). В любом случае Open Design никогда не проксирует ваши учётные данные — они используются напрямую вашим агентом на вашей машине."}, {"name": "Claude Code или Codex для фронтенд-дизайна?", "text": "Оба сильны. Claude Code известен конкретными, учитывающими кодовую базу дизайн-решениями и фронтенд-рассуждениями; Codex обладает сильной визуальной отточенностью и блистает в делегированных сборках в песочнице. Многие команды используют оба — Open Design позволяет переключать агентов, не меняя дизайн-процесс."}, {"name": "Как подключить Claude Code к Figma?", "text": "Установите официальный плагин Figma командой claude plugin install figma@claude-plugins-official. После этого вы можете реализовывать фреймы Figma в коде, используя дизайн-контекст, и отправлять работающий UI обратно в редактируемые фреймы Figma через «Send this to Figma». Dev Mode MCP требует платного плана Figma."}, {"name": "Что такое Skills и CLAUDE.md?", "text": "CLAUDE.md — это markdown-файл в корне проекта, который Claude Code читает в начале каждой сессии — место для фиксации ваших дизайн-конвенций. Skills упаковывают повторяемые инструкции и ресурсы, которые Claude подгружает по требованию, включая официальный Frontend Design skill от Anthropic. Open Design поставляет курируемую библиотеку и того, и другого, так что вы пропускаете настройку под каждый проект."}, {"name": "Как избежать шаблонной эстетики «AI slop»?", "text": "Установите Frontend Design skill, предоставьте реальные дизайн-tokens и референсные скриншоты, зафиксируйте правила бренда в CLAUDE.md и включите проверку в браузере. Open Design поставляет это как курируемую библиотеку, так что вы пропускаете настройку под каждый проект."}, {"name": "Связан ли Open Design с Anthropic?", "text": "Нет. Claude Code — продукт Anthropic; Open Design — независимый open-source проект, который поддерживает его как нативный адаптер. Claude и Claude Code являются товарными знаками Anthropic."}, {"name": "В безопасности ли мои файлы и учётные данные?", "text": "Да — Open Design является local-first и под Apache-2.0. Ваши файлы, артефакты и DESIGN.md остаются в вашем собственном репозитории, а ваши учётные данные Anthropic используются напрямую вашим агентом и никогда не маршрутизируются через серверы Open Design."}], "ctaTitle": "Дизайн с Claude Code, по-открытому.", "ctaBody": "Используйте свой ключ Anthropic или подписку Claude, держите каждый файл локально и получите курируемую дизайн-библиотеку вокруг агента, которым вы уже пользуетесь.", "ctaActions": [{"label": "Использовать Claude Code в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставить звезду на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Скачать десктопное приложение", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Посмотреть всех поддерживаемых агентов"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex для дизайна — Open Design", + description: "Как люди используют OpenAI Codex для UI и веб-дизайна — плагин Product Design, интеграция с Figma, фронтенд-skills — и как Open Design превращает Codex в local-first, open-source дизайн-агента.", + breadcrumb: "Codex", + label: "Агент · Codex", + heading: "Codex для дизайна.", + lead: "Codex — это кодинг-агент от OpenAI. С плагином Product Design и интеграцией Figma он стал серьёзным дизайн-инструментом. Open Design встраивает Codex в open-source дизайн-процесс — ваш ключ OpenAI или подписка ChatGPT, ваши файлы, local-first.", + rich: {"heroCtaLead": "Open Design превращает Codex в local-first, open-source дизайн-агента — ваш ключ OpenAI, ваши файлы и курируемая библиотека skill и дизайн-систем вокруг него.", "heroCtaActions": [{"label": "Использовать Codex в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставить звезду на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Скачать десктопное приложение", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex начинался как генератор кода, но в 2026 году стал достойным инструментом для проектирования настоящих интерфейсов — стоит дать ему правильные референсы, skills и цикл проверки. Это практичное, сквозное руководство по использованию Codex для UI, фронтенда и работы с дизайн-системами, а также по встраиванию его в структурированный дизайн-процесс с Open Design.", "Оно охватывает то, чем Codex является сегодня, почему он внезапно хорош во фронтенде, как настроить его с нуля, цикл «скриншот в UI», официальный round-trip с Figma, как он сравнивается с Cursor и Claude Code, какие подводные камни делают вывод ИИ шаблонным и как Open Design закрывает этот разрыв как открытый, local-first дизайн-слой."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Цикл обратной связи дизайна Codex: терминальный агент, браузер отрисовывает UI и рабочее пространство со стрелкой обратной связи, замыкающей цикл", "caption": "Ключевой цикл: Codex собирает UI в терминале, отрисовывает и проверяет его в настоящем браузере и итерирует по вашим референсам."}, "tocLabel": "На этой странице", "toc": [{"id": "what-is-codex", "label": "Чем на самом деле является OpenAI Codex"}, {"id": "why-design", "label": "Почему Codex теперь хорош в дизайне"}, {"id": "setup", "label": "Настройка Codex для дизайна (с нуля)"}, {"id": "screenshot-workflow", "label": "Рабочий процесс «скриншот в UI»"}, {"id": "figma", "label": "Round-trip Codex + Figma"}, {"id": "vs", "label": "Codex против Cursor против Claude Code"}, {"id": "pitfalls", "label": "Подводные камни и вид «AI slop»"}, {"id": "open-design", "label": "Дизайн с Codex в Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-codex", "heading": "Чем на самом деле является OpenAI Codex (и чем он не является)", "blocks": [{"kind": "p", "text": "Сначала уточнение, которое сбивает с толку почти всех, кто ищет «Codex». Изначальный OpenAI Codex был моделью автодополнения кода 2021 года, питавшей ранний GitHub Copilot и устаревшей в 2023 году. Эта страница не о нём. Сегодняшний Codex — это агентный инструмент для кодинга от OpenAI: он планирует, пишет, запускает и проверяет код по задачам на естественном языке."}, {"kind": "p", "text": "Современный Codex поставляется в четырёх форматах: терминальный CLI (переписанный на Rust, под лицензией Apache-2.0), расширение IDE для VS Code, Cursor и Windsurf, облачно-веб-версия для делегированных асинхронных задач и десптопное приложение со встроенным браузером и Computer Use."}, {"kind": "steps", "items": [{"label": "Модель по умолчанию", "body": "По состоянию на середину 2026 года рекомендуемая модель — gpt-5.5, при этом gpt-5.4 — это модель, которую OpenAI явно обучала для фронтенда и computer use."}, {"label": "Файл инструкций", "body": "Codex читает файл AGENTS.md в вашем проекте (кросс-инструментальный стандарт) для правил проекта — естественное место, где можно зафиксировать ваши дизайн-конвенции."}, {"label": "Песочница", "body": "Он работает в песочнице на уровне ядра (по умолчанию workspace-write), так что агент, редактирующий ваш UI, не может выйти за пределы проекта."}]}, {"kind": "ul", "items": ["Поставщик: OpenAI", "Учётные данные: API-ключ OpenAI (BYOK) или подписка ChatGPT (Free / Go / Plus / Pro / Business / Enterprise)", "Лицензия CLI: Apache-2.0, open source"]}]}, {"id": "why-design", "heading": "Почему Codex теперь хорош в дизайне", "blocks": [{"kind": "p", "text": "В начале 2026 года сошлись три вещи, превратившие Codex в настоящий дизайн-инструмент, а не в общий генератор кода."}, {"kind": "steps", "items": [{"label": "Модель, обученная для фронтенда", "body": "OpenAI выпустила GPT-5.4 — свою первую основную модель, обученную для фронтенда и computer use, с гораздо лучшим пониманием изображений во всём дизайн-процессе и более сильной самопроверкой. Она даже умеет генерировать mood-board'ы и визуальные варианты до фиксации финальных ассетов."}, {"label": "Официальный frontend skill", "body": "Каталог openai/skills поставляет курируемый frontend-skill, который навязывает реальный вкус: раскладки без карточек, full-bleed герои, иерархия от бренда, сдержанная анимация, не более двух шрифтов и одного акцентного цвета — и заставляет Codex сформулировать визуальный тезис до сборки."}, {"label": "Проверка в браузере", "body": "С Playwright skill Codex открывает настоящий браузер, меняет размер до брейкпоинтов и сравнивает свой вывод с референсом, а не просто проверяет, что сборка прошла."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Диаграмма, показывающая, как дизайн-система, skill и референсное изображение сходятся в хороший дизайн-результат", "caption": "Вкус рождается из трёх вводных, которые вы предоставляете: дизайн-системы, skill и реальных референсных изображений."}, {"kind": "p", "text": "Урок, стоящий за всеми тремя: у Codex по умолчанию нет вкуса. Он создаёт хороший дизайн, когда вы даёте ему ограничения — дизайн-систему, эстетический skill и конкретные референсы. Open Design упаковывает именно эти вводные, поэтому они так хорошо сочетаются (подробнее ниже)."}]}, {"id": "setup", "heading": "Настройка Codex для дизайна с нуля", "blocks": [{"kind": "p", "text": "Вот полный путь от чистой машины до Codex, способного создавать и проверять UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Пятишаговый процесс настройки: установка, аутентификация, настройка, установка skill, проверка", "caption": "Последовательность настройки: установка → аутентификация → настройка AGENTS.md → установка frontend skill → включение проверки в браузере."}, {"kind": "steps", "items": [{"label": "Зафиксируйте свои дизайн-правила", "body": "Поместите свои tokens, примитивы и конвенции в AGENTS.md или DESIGN.md и направьте Codex к ним, чтобы вывод соответствовал бренду, а не сваливался в шаблонный вид."}, {"label": "Выберите правильный уровень рассуждения", "body": "OpenAI отмечает, что низкий-средний уровни рассуждения часто дают более сильные фронтенд-результаты, чем максимальная настройка."}]}]}, {"id": "screenshot-workflow", "heading": "Рабочий процесс «скриншот в UI»", "blocks": [{"kind": "p", "text": "Самый эффективный дизайн-цикл с Codex — это превращение референсного изображения в работающий, адаптивный UI и итерация до совпадения. Собственное руководство OpenAI сводится к пяти шагам."}, {"kind": "ol", "items": ["Начинайте с самых ясных визуальных референсов, что у вас есть, — и включайте несколько состояний (десктоп и мобильный, hover, пустое, загрузка), а не только один hero-кадр.", "Будьте конкретны в промпте; расплывчатые промпты дают шаблонный UI.", "Подготовьте дизайн-систему и подскажите Codex, где лежат tokens и канонические примитивы.", "Включите интерактивный Playwright skill, чтобы Codex отрисовывал результат в настоящем браузере и менял размер до брейкпоинтов.", "Итерируйте, заставляя Codex сравнивать свою реализацию со скриншотами, а не просто подтверждать сборку."]}, {"kind": "p", "text": "Передавайте изображения, перетаскивая скриншот в терминал или с помощью флага изображения, затем задавайте промпт с конкретными ограничениями:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Запускайте dev-сервер во втором терминале, держите промпты короткими и сфокусированными и коммитьте удачные итерации / откатывайте неудачные (сообщая Codex об откате), чтобы каждый проход строился на чистой основе."}]}, {"id": "figma", "heading": "Codex + Figma: round-trip дизайн ↔ код", "blocks": [{"kind": "p", "text": "В феврале 2026 года OpenAI и Figma объявили об официальном партнёрстве, превратив более раннюю бету Figma MCP в первоклассную двунаправленную интеграцию. Она работает в обе стороны."}, {"kind": "steps", "items": [{"label": "Дизайн → Код", "body": "Скопируйте «link to selection» фрейма в Figma, вставьте его в Codex вместе с get_design_context и попросите реализовать дизайн с использованием вашей существующей библиотеки компонентов."}, {"label": "Код → Дизайн", "body": "Инструмент generate_figma_design («Code to Canvas») превращает живой, работающий UI обратно в редактируемые фреймы Figma — весь экран, выбранный элемент или целый файл."}]}, {"kind": "p", "text": "Figma MCP работает как удалённый сервер и не подпадает под лимиты запросов. Добавьте его один раз — и он доступен Codex, Claude Code, Cursor, VS Code и другим — именно такая переносимая, мультиагентная возможность, которую Open Design создан оркестрировать."}]}, {"id": "vs", "heading": "Codex против Cursor против Claude Code для дизайна", "blocks": [{"kind": "p", "text": "Единого победителя в дизайн-работе нет — у каждого агента своя сильная сторона, и опытные команды комбинируют их. Честная сводка:"}, {"kind": "table", "columns": ["Агент", "Сила в дизайне", "Лучше всего для"], "rows": [["Codex", "Сильная визуальная отточенность после GPT-5.4 + frontend-skill; понимание изображений", "Делегированные асинхронные сборки, запуски в песочнице, переносимые правила AGENTS.md"], ["Cursor", "Визуальный цикл «собери и посмотри» с живым предпросмотром и инлайн-правками", "Тесная работа над UI «итерируй и наблюдай» внутри IDE"], ["Claude Code", "Конкретные дизайн-решения (hex, отступы, типографика) и UX с учётом кодовой базы", "Фронтенд-рассуждения и рефакторинги с большим контекстом"]]}, {"kind": "p", "text": "Повторяющийся вердикт сообщества: вкус исходит от людей — все три по умолчанию сваливаются в шаблонную эстетику без skills, референсов и ограничений. Вот настоящая проблема, которую нужно решить — и она по форме относится к дизайн-инструменту, а не к модели."}]}, {"id": "pitfalls", "heading": "Подводные камни и как избежать вида «AI slop»", "blocks": [{"kind": "p", "text": "Самая частая жалоба на дизайн, сгенерированный Codex, в том, что он выглядит шаблонно — мягкие градиенты, плавающие панели, чрезмерно скруглённые углы, драматичные тени, вайб Inter-и-фиолетового, который «кричит, что это сделал ИИ». Среди других сообщаемых проблем — сломанные мобильные раскладки, инструкции, протекающие в текст UI, и быстрое достижение лимитов использования."}, {"kind": "steps", "items": [{"label": "Установите frontend skill", "body": "Курируемый эстетический skill заставляет Codex задать реальное направление вместо вида по умолчанию."}, {"label": "Включите проверку Playwright", "body": "Заставьте Codex отрисовывать и самопроверять результат на разных брейкпоинтах, чтобы раскладки не ломались незаметно на мобильном."}, {"label": "Предоставьте tokens и референсы", "body": "Реальные дизайн-tokens и референсные скриншоты — самый сильный рычаг для качества вывода."}, {"label": "Зафиксируйте правила в AGENTS.md", "body": "Поместите правила вроде «без hero-карточек, максимум два шрифта, иерархия от бренда» туда, где агент читает их при каждом запуске."}]}, {"kind": "p", "text": "Обратите внимание: каждое из этих средств сводится к тому, чтобы дать агенту курируемый дизайн-контекст. Поддержка этого контекста вручную, для каждого проекта, — та рутина, которую устраняет Open Design."}]}, {"id": "open-design", "heading": "Дизайн с Codex внутри Open Design", "blocks": [{"kind": "p", "text": "Open Design — это тот open-source дизайн-слой, которого процесс выше постоянно требует. Он рассматривает Codex как нативный адаптер и оборачивает его в курируемую библиотеку skill и дизайн-систем, структурированный конвейер рендера и локальный десктопный UI — так что дизайн-контекст, делающий Codex хорошим, есть с первого запуска, а не собирается вручную каждый раз."}, {"kind": "ol", "items": ["Установите Open Design и выберите Codex как своего агента.", "Аутентифицируйтесь с помощью API-ключа OpenAI (BYOK) или подписки ChatGPT — учётные данные остаются на вашей машине и никогда не проксируются через нас.", "Выберите дизайн-систему и skill, затем генерируйте презентации, прототипы и лендинги с единообразным вкусом.", "Каждый артефакт и файл DESIGN.md живёт в вашем собственном репозитории, а не в хостинговом облаке."]}, {"kind": "p", "text": "Тот же агент Codex, тот же ключ — плюс настоящий, переносимый, open-source дизайн-процесс вокруг него. Он local-first и под Apache-2.0, так что ничто из вашей работы или ваших учётных данных не покидает машину."}]}], "faqTitle": "Часто задаваемые вопросы", "faq": [{"name": "Действительно ли OpenAI Codex способен на дизайн-работу?", "text": "Да — с frontend skill, дизайн-системой и реальными референсными изображениями в контексте Codex (особенно на GPT-5.4) создаёт продакшен-качественный, адаптивный UI и может проверить его в браузере. Без такого контекста он склонен сваливаться в шаблонный вид — и именно этот разрыв закрывает Open Design."}, {"name": "Это плагин OpenAI Codex Product Design?", "text": "Нет. Open Design — независимый open-source проект, который интегрирует Codex как агента. Он дополняет собственный инструментарий OpenAI local-first, открытой библиотекой skill и дизайн-систем."}, {"name": "Нужна ли подписка ChatGPT, чтобы заниматься дизайном с Codex?", "text": "Вы можете использовать либо API-ключ OpenAI (BYOK), либо вашу подписку ChatGPT. Вход через ChatGPT обычно даёт более щедрые лимиты; в любом случае Open Design никогда не проксирует ваши учётные данные."}, {"name": "Codex или Claude Code для фронтенд-дизайна?", "text": "Оба сильны. Claude Code известен конкретными, учитывающими кодовую базу дизайн-решениями; Codex обладает сильной визуальной отточенностью после GPT-5.4 и блистает в делегированных сборках в песочнице. Многие команды используют оба — Open Design позволяет переключать агентов, не меняя дизайн-процесс."}, {"name": "Как подключить Codex к Figma?", "text": "Добавьте официальный сервер Figma MCP (codex mcp add figma --url https://mcp.figma.com/mcp). После этого вы можете реализовывать фреймы Figma в коде с помощью get_design_context и отправлять работающий UI обратно в редактируемые фреймы Figma через generate_figma_design."}, {"name": "Как избежать шаблонной эстетики «AI slop»?", "text": "Установите frontend skill, предоставьте реальные дизайн-tokens и референсные скриншоты, зафиксируйте правила бренда в AGENTS.md и включите проверку Playwright. Open Design поставляет это как курируемую библиотеку, так что вы пропускаете настройку под каждый проект."}, {"name": "Связан ли Open Design с OpenAI?", "text": "Нет. Codex — продукт OpenAI; Open Design — независимый open-source проект, который поддерживает его как нативный адаптер. OpenAI и Codex являются товарными знаками OpenAI."}, {"name": "В безопасности ли мои файлы и учётные данные?", "text": "Да — Open Design является local-first. Ваши файлы, артефакты и DESIGN.md остаются в вашем собственном репозитории, а ваши учётные данные OpenAI используются напрямую вашим агентом и никогда не маршрутизируются через серверы Open Design."}], "ctaTitle": "Дизайн с Codex, по-открытому.", "ctaBody": "Используйте свой ключ OpenAI, держите каждый файл локально и получите курируемую дизайн-библиотеку вокруг агента, которым вы уже пользуетесь.", "ctaActions": [{"label": "Использовать Codex в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставить звезду на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Скачать десктопное приложение", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Посмотреть всех поддерживаемых агентов"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor для дизайнеров — Open Design", + description: "Как дизайнеры используют Cursor для UI и веб-дизайна — Design Mode, Figma-в-код, Figma MCP — и как Open Design превращает Cursor в local-first, open-source дизайн-агента.", + breadcrumb: "Cursor", + label: "Агент · Cursor", + heading: "Cursor для дизайнеров.", + lead: "Cursor — это редактор кода с ИИ, теперь с визуальным Design Mode. Дизайнеры используют его, чтобы редактировать UI наведением и рисованием и превращать Figma в код. Open Design встраивает Cursor Agent в open-source дизайн-процесс, который держит ваши файлы локально.", + rich: {"heroCtaLead": "Open Design превращает Cursor в local-first, open-source дизайн-агента — ваш аккаунт Cursor или ключи моделей, ваши файлы и курируемая библиотека skill и дизайн-систем вокруг него.", "heroCtaActions": [{"label": "Использовать Cursor в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставить звезду на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Скачать десктопное приложение", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor — это AI-first редактор кода, сделавший «собери и смотри, как отрисовывается» способом по умолчанию для выпуска UI. С режимом Agent, инлайн-правками, предпросмотром в редакторе и Figma поверх MCP он стал настоящим дизайн-инструментом — стоит дать ему правильные референсы, правила и цикл проверки. Это практичное, сквозное руководство по использованию Cursor для UI, фронтенда и работы с дизайн-системами, а также по встраиванию его в структурированный дизайн-процесс с Open Design.", "Оно охватывает то, чем на самом деле является Cursor, почему его тесный цикл «итерируй и наблюдай» хорош для дизайна, как настроить его с нуля, цикл «скриншот-и-предпросмотр в UI», round-trip с Figma поверх MCP, как он сравнивается с Codex и Claude Code, какие подводные камни делают вывод ИИ шаблонным и как Open Design закрывает этот разрыв как открытый, local-first дизайн-слой."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Сходимость дизайна Cursor: редактор слева, курируемый хаб skill и дизайн-систем по центру со знаком Cursor в середине и отрисованный UI справа", "caption": "Ключевая идея: Cursor редактирует и отрисовывает UI в редакторе, а курируемый дизайн-хаб подаёт ему систему, skills и референсы, благодаря которым вывод выглядит осознанным."}, "tocLabel": "На этой странице", "toc": [{"id": "what-is-cursor", "label": "Чем на самом деле является Cursor"}, {"id": "why-design", "label": "Почему Cursor хорош в дизайне"}, {"id": "setup", "label": "Настройка Cursor для дизайна (с нуля)"}, {"id": "preview-workflow", "label": "Рабочий процесс «предпросмотр в UI»"}, {"id": "figma", "label": "Cursor + Figma поверх MCP"}, {"id": "vs", "label": "Cursor против Codex против Claude Code"}, {"id": "pitfalls", "label": "Подводные камни и вид «AI slop»"}, {"id": "open-design", "label": "Дизайн с Cursor в Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-cursor", "heading": "Чем на самом деле является Cursor", "blocks": [{"kind": "p", "text": "Cursor — это AI-first редактор кода, созданный Anysphere. Это форк VS Code, поэтому он сохраняет привычный редактор, расширения и горячие клавиши, но перестраивает рабочий процесс вокруг ИИ-агента, который умеет читать весь ваш проект, редактировать множество файлов, выполнять команды и итерировать вместе с вами в цикле."}, {"kind": "p", "text": "Для дизайн-работы важны режим Agent (вы описываете результат, а Cursor планирует и редактирует по файлам), инлайн-правки и дополнения Tab для быстрых правок, предпросмотр / браузер прямо в редакторе, чтобы видеть работающий UI, не покидая окно, и поддержка MCP, позволяющая подтягивать внешний контекст, например живой файл Figma."}, {"kind": "steps", "items": [{"label": "Правила проекта", "body": "Cursor читает файлы инструкций проекта — версионируемые правила `.mdc` в `.cursor/rules` и обычный `AGENTS.md` — так что вы можете зафиксировать дизайн-конвенции там, где агент читает их при каждом запуске."}, {"label": "Модели", "body": "Cursor гибок по моделям: он поставляется с передовыми моделями через вашу подписку, а также поддерживает использование собственных ключей моделей, так что вы выбираете движок за тем же рабочим процессом редактора."}, {"label": "MCP", "body": "Он говорит на Model Context Protocol, так что внешние серверы — в первую очередь сервер Figma MCP — становятся первоклассным контекстом для агента."}]}, {"kind": "ul", "items": ["Поставщик: Anysphere", "Учётные данные: аккаунт / подписка Cursor (Hobby / Pro / Business) или ваши собственные ключи моделей (BYOK)", "Форма: AI-first редактор кода (форк VS Code) со встроенным агентом и предпросмотром"]}]}, {"id": "why-design", "heading": "Почему Cursor хорош в дизайне", "blocks": [{"kind": "p", "text": "Преимущество Cursor в дизайне — не отдельная фича, а теснота цикла «собери и посмотри». Три вещи делают его похожим на дизайн-инструмент, а не на общий генератор кода."}, {"kind": "steps", "items": [{"label": "Тесный цикл «итерируй и наблюдай»", "body": "Вы задаёте промпт, Cursor редактирует по файлам, а предпросмотр в редакторе отрисовывает результат немедленно — так вы правите отступы, иерархию и анимацию за секунды, вместо того чтобы ходить туда-сюда через отдельный терминал и браузер."}, {"label": "Прямое визуальное редактирование", "body": "Помимо чата, Cursor позволяет выбирать элементы в предпросмотре и подкручивать стили, так что мелкие визуальные правки ощущаются как дизайн-правки, а не как археология кода."}, {"label": "Правила проекта и контекст MCP", "body": "С `.cursor/rules` (или `AGENTS.md`) и сервером Figma MCP агент работает с вашими tokens, компонентами и реальными дизайн-спецификациями, а не угадывает."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Диаграмма, показывающая, как дизайн-система, skill и референсное изображение сходятся в хороший дизайн-результат", "caption": "Вкус рождается из трёх вводных, которые вы предоставляете: дизайн-системы, skill и реальных референсных изображений."}, {"kind": "p", "text": "Урок тот же, что преподаёт каждый агент: у Cursor по умолчанию нет вкуса. Он создаёт хороший дизайн, когда вы даёте ему ограничения — дизайн-систему, эстетический skill и конкретные референсы. Open Design упаковывает именно эти вводные, поэтому они так хорошо сочетаются (подробнее ниже)."}]}, {"id": "setup", "heading": "Настройка Cursor для дизайна с нуля", "blocks": [{"kind": "p", "text": "Вот полный путь от чистой машины до Cursor, способного собирать, предпросматривать и проверять UI на соответствие вашей дизайн-системе."}, {"kind": "ol", "items": ["Установите Cursor с cursor.com и войдите со своим аккаунтом Cursor либо настройте собственные ключи моделей (BYOK) в Settings.", "Откройте свой проект и выберите модель на панели чата / Agent.", "Добавьте правила проекта: создайте `.cursor/rules/*.mdc` для структурированных конвенций с областью по glob либо обычный `AGENTS.md` для простых, читаемых инструкций.", "Подключите сервер Figma MCP (опционально), чтобы агент мог читать живой дизайн-контекст.", "Запустите dev-сервер и используйте предпросмотр в редакторе, чтобы видеть и проверять UI по мере итерации."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Пятишаговый процесс настройки: установка, аутентификация, настройка правил, добавление skill, проверка", "caption": "Последовательность настройки: установка → аутентификация → настройка правил проекта → добавление skill → включение проверки в предпросмотре."}, {"kind": "p", "text": "Минимальный файл правил проекта заставляет агента проектировать под бренд, а не сваливаться в шаблонный вид. Поместите его туда, где Cursor читает его при каждом запуске:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Зафиксируйте свои дизайн-правила", "body": "Поместите свои tokens, примитивы и конвенции в `.cursor/rules` или `AGENTS.md` и направьте Cursor к ним, чтобы вывод соответствовал бренду, а не сваливался в шаблонный вид."}, {"label": "Держите промпты короткими", "body": "Тесный цикл Cursor вознаграждает сфокусированные запросы — итерируйте по одному компоненту или состоянию за раз и смотрите на предпросмотр между проходами."}]}]}, {"id": "preview-workflow", "heading": "Рабочий процесс «предпросмотр в UI»", "blocks": [{"kind": "p", "text": "Самый эффективный дизайн-цикл с Cursor — это превращение референса в работающий, адаптивный UI и итерация в редакторе до совпадения, наблюдая живой предпросмотр всё время, а не угадывая."}, {"kind": "ol", "items": ["Начинайте с самых ясных визуальных референсов, что у вас есть, — и включайте несколько состояний (десктоп и мобильный, hover, пустое, загрузка), а не только один hero-кадр.", "Будьте конкретны в промпте; расплывчатые промпты дают шаблонный UI.", "Подготовьте дизайн-систему и подскажите Cursor, где лежат tokens и канонические примитивы.", "Держите предпросмотр в редакторе открытым, а dev-сервер запущенным, чтобы каждая правка отрисовывалась немедленно на нужных вам брейкпоинтах.", "Итерируйте, сравнивая отрисованный UI с референсами, — и используйте прямой выбор элементов в предпросмотре для мелких визуальных правок."]}, {"kind": "p", "text": "Передавайте референсы, прикрепляя изображение к чату, затем задавайте промпт с конкретными ограничениями:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Коммитьте удачные итерации и откатывайте неудачные (сообщая Cursor об откате), чтобы каждый проход строился на чистой основе — та же дисциплина, что удерживает любой агентный цикл от дрейфа."}]}, {"id": "figma", "heading": "Cursor + Figma: дизайн ↔ код поверх MCP", "blocks": [{"kind": "p", "text": "Cursor подключается к Figma через официальный сервер Figma MCP, дающий агенту структурированный доступ к живому файлу Figma вместо плоского скриншота. Это убирает угадывание из handoff."}, {"kind": "steps", "items": [{"label": "Дизайн → Код", "body": "Скопируйте ссылку фрейма в Figma, вставьте её в Cursor и попросите реализовать дизайн. Сервер MCP раскрывает реальный дизайн-контекст — компоненты, переменные, данные раскладки, tokens — так что сгенерированный код соответствует источнику, а не приближается к нему."}, {"label": "Оставайтесь согласованными", "body": "При согласованном использовании дизайн-tokens, стилей и компонентов в Figma (и Code Connect, где доступен) вывод Cursor остаётся сопоставленным с вашей реальной дизайн-системой, а не переизобретает примитивы."}]}, {"kind": "p", "text": "Настройте удалённый сервер Figma MCP один раз — и он доступен Cursor как первоклассный контекст. Поскольку MCP — открытый стандарт, тот же сервер переиспользуется в Cursor, Claude Code, Codex и VS Code — именно такая переносимая, мультиагентная возможность, которую Open Design создан оркестрировать."}]}, {"id": "vs", "heading": "Cursor против Codex против Claude Code для дизайна", "blocks": [{"kind": "p", "text": "Единого победителя в дизайн-работе нет — у каждого агента своя сильная сторона, и опытные команды комбинируют их. Честная сводка:"}, {"kind": "table", "columns": ["Агент", "Сила в дизайне", "Лучше всего для"], "rows": [["Cursor", "Визуальный цикл «собери и посмотри» с живым предпросмотром в редакторе и прямым редактированием элементов", "Тесная работа над UI «итерируй и наблюдай» внутри IDE"], ["Codex", "Сильная визуальная отточенность с frontend skill; понимание изображений и запуски в песочнице", "Делегированные асинхронные сборки и переносимые правила AGENTS.md"], ["Claude Code", "Конкретные дизайн-решения (hex, отступы, типографика) и UX с учётом кодовой базы", "Фронтенд-рассуждения и рефакторинги с большим контекстом"]]}, {"kind": "p", "text": "Повторяющийся вердикт сообщества: вкус исходит от людей — все три по умолчанию сваливаются в шаблонную эстетику без skills, референсов и ограничений. Вот настоящая проблема, которую нужно решить — и она по форме относится к дизайн-инструменту, а не к модели."}]}, {"id": "pitfalls", "heading": "Подводные камни и как избежать вида «AI slop»", "blocks": [{"kind": "p", "text": "Самая частая жалоба на дизайн, сгенерированный Cursor, в том, что он выглядит шаблонно — мягкие градиенты, плавающие панели, чрезмерно скруглённые углы, драматичные тени, вайб Inter-и-фиолетового, который «кричит, что это сделал ИИ». Среди других сообщаемых проблем — раскладки, ломающиеся на мобильном, и инструкции, протекающие в текст UI."}, {"kind": "steps", "items": [{"label": "Добавьте дизайн-skill", "body": "Курируемый эстетический skill заставляет Cursor задать реальное направление вместо вида по умолчанию."}, {"label": "Используйте предпросмотр для проверки", "body": "Отрисовывайте и самопроверяйте результат на разных брейкпоинтах в предпросмотре редактора, чтобы раскладки не ломались незаметно на мобильном."}, {"label": "Предоставьте tokens и референсы", "body": "Реальные дизайн-tokens и референсные скриншоты — самый сильный рычаг для качества вывода."}, {"label": "Зафиксируйте правила в `.cursor/rules`", "body": "Поместите правила вроде «без hero-карточек, максимум два шрифта, иерархия от бренда» туда, где агент читает их при каждом запуске."}]}, {"kind": "p", "text": "Обратите внимание: каждое из этих средств сводится к тому, чтобы дать агенту курируемый дизайн-контекст. Поддержка этого контекста вручную, для каждого проекта, — та рутина, которую устраняет Open Design."}]}, {"id": "open-design", "heading": "Дизайн с Cursor внутри Open Design", "blocks": [{"kind": "p", "text": "Open Design — это тот open-source дизайн-слой, которого процесс выше постоянно требует. Он рассматривает Cursor как нативный адаптер и оборачивает его в курируемую библиотеку skill и дизайн-систем, структурированный конвейер рендера и локальный десктопный UI — так что дизайн-контекст, делающий Cursor хорошим, есть с первого запуска, а не собирается вручную каждый раз."}, {"kind": "ol", "items": ["Установите Open Design и выберите Cursor как своего агента.", "Аутентифицируйтесь с помощью аккаунта Cursor или собственных ключей моделей (BYOK) — учётные данные остаются на вашей машине и никогда не проксируются через нас.", "Выберите дизайн-систему и skill, затем генерируйте презентации, прототипы и лендинги с единообразным вкусом.", "Каждый артефакт и файл DESIGN.md живёт в вашем собственном репозитории, а не в хостинговом облаке."]}, {"kind": "p", "text": "Тот же агент Cursor, тот же ключ — плюс настоящий, переносимый, open-source дизайн-процесс вокруг него. Он local-first и под Apache-2.0, так что ничто из вашей работы или ваших учётных данных не покидает машину."}]}], "faqTitle": "Часто задаваемые вопросы", "faq": [{"name": "Действительно ли Cursor способен на дизайн-работу?", "text": "Да — с дизайн-skill, дизайн-системой и реальными референсными изображениями в контексте Cursor создаёт продакшен-качественный, адаптивный UI, а его предпросмотр в редакторе позволяет проверять и дорабатывать его визуально. Без такого контекста он склонен сваливаться в шаблонный вид — и именно этот разрыв закрывает Open Design."}, {"name": "Это официальный продукт Cursor?", "text": "Нет. Open Design — независимый open-source проект, который интегрирует Cursor как агента. Он дополняет Cursor local-first, открытой библиотекой skill и дизайн-систем."}, {"name": "Нужна ли подписка Cursor, чтобы заниматься дизайном с Cursor?", "text": "Вы можете использовать аккаунт / подписку Cursor либо собственные ключи моделей (BYOK). В любом случае Open Design никогда не проксирует ваши учётные данные — они используются напрямую вашим агентом."}, {"name": "Cursor или Claude Code для фронтенд-дизайна?", "text": "Оба сильны. Claude Code известен конкретными, учитывающими кодовую базу дизайн-решениями; преимущество Cursor — его тесный цикл «собери и посмотри» с живым предпросмотром внутри редактора. Многие команды используют оба — Open Design позволяет переключать агентов, не меняя дизайн-процесс."}, {"name": "Как подключить Cursor к Figma?", "text": "Добавьте официальный сервер Figma MCP в Cursor, затем вставьте ссылку на фрейм Figma в чат и попросите Cursor реализовать его. Сервер раскрывает реальные компоненты, переменные и данные раскладки, так что сгенерированный код соответствует исходному дизайну."}, {"name": "Как избежать шаблонной эстетики «AI slop»?", "text": "Добавьте дизайн-skill, предоставьте реальные дизайн-tokens и референсные скриншоты, зафиксируйте правила бренда в `.cursor/rules` или `AGENTS.md` и проверяйте на разных брейкпоинтах в предпросмотре. Open Design поставляет это как курируемую библиотеку, так что вы пропускаете настройку под каждый проект."}, {"name": "Связан ли Open Design с Cursor или Anysphere?", "text": "Нет. Cursor — продукт Anysphere; Open Design — независимый open-source проект, который поддерживает его как нативный адаптер. Cursor и Anysphere являются товарными знаками Anysphere, Inc."}, {"name": "В безопасности ли мои файлы и учётные данные?", "text": "Да — Open Design является local-first. Ваши файлы, артефакты и DESIGN.md остаются в вашем собственном репозитории, а ваши учётные данные Cursor или моделей используются напрямую вашим агентом и никогда не маршрутизируются через серверы Open Design."}], "ctaTitle": "Дизайн с Cursor, по-открытому.", "ctaBody": "Используйте свой аккаунт Cursor или ключи моделей, держите каждый файл локально и получите курируемую дизайн-библиотеку вокруг агента, которым вы уже пользуетесь.", "ctaActions": [{"label": "Использовать Cursor в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставить звезду на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Скачать десктопное приложение", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Посмотреть всех поддерживаемых агентов"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode для дизайна — Open Design", + description: "Как люди используют OpenCode для UI и веб-дизайна — файлы design.md, UI/UX skills, Figma MCP — и как Open Design превращает OpenCode в local-first, open-source дизайн-агента.", + breadcrumb: "OpenCode", + label: "Агент · OpenCode", + heading: "OpenCode для дизайна.", + lead: "OpenCode — это open-source терминальный ИИ-агент для кодинга. Дизайнеры навешивают на него дизайн-skills и файлы DESIGN.md, чтобы генерировать настоящий UI. Open Design делает это структурированным, open-source процессом — используйте свои ключи провайдеров и держите всё локально.", + rich: {"heroCtaLead": "Open Design превращает OpenCode в local-first, open-source дизайн-агента — любая модель на ваш выбор с вашим собственным ключом провайдера, ваши файлы и курируемая библиотека skill и дизайн-систем вокруг него.", "heroCtaActions": [{"label": "Использовать OpenCode в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставить звезду на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Скачать десктопное приложение", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode — это open-source, терминальный ИИ-агент для кодинга, намеренно независимый от моделей: вы используете собственный ключ провайдера и запускаете любую модель за тем же рабочим процессом. Эта открытость делает его естественной базой для дизайн-работы — но, как и любой агент, он создаёт хороший UI лишь тогда, когда вы даёте ему правильные референсы, skills и цикл проверки. Это практичное, сквозное руководство по использованию OpenCode для UI, фронтенда и работы с дизайн-системами, а также по встраиванию его в структурированный дизайн-процесс с Open Design.", "Оно охватывает то, чем на самом деле является OpenCode, почему независимый от моделей открытый агент хорошо подходит для дизайна, как настроить его с нуля, цикл «скриншот в UI», как AGENTS.md и MCP расширяют его, как он сравнивается с Codex, Claude Code и Cursor, какие подводные камни делают вывод ИИ шаблонным и как Open Design закрывает этот разрыв как открытый, local-first дизайн-слой — естественное сочетание, ведь оба проекта open-source и работают на вашей собственной машине."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "Цикл обратной связи дизайна OpenCode: терминальный TUI-агент, браузер отрисовывает UI и рабочее пространство со стрелкой обратной связи, замыкающей цикл", "caption": "Ключевой цикл: OpenCode собирает UI в терминале, отрисовывает и проверяет его в настоящем браузере и итерирует по вашим референсам — на любой модели по вашему выбору."}, "tocLabel": "На этой странице", "toc": [{"id": "what-is-opencode", "label": "Чем на самом деле является OpenCode"}, {"id": "why-design", "label": "Почему открытый агент с любой моделью подходит для дизайна"}, {"id": "setup", "label": "Настройка OpenCode для дизайна (с нуля)"}, {"id": "screenshot-workflow", "label": "Рабочий процесс «скриншот в UI»"}, {"id": "extend", "label": "AGENTS.md, MCP и общие сессии"}, {"id": "vs", "label": "OpenCode против Codex против Claude Code против Cursor"}, {"id": "pitfalls", "label": "Подводные камни и вид «AI slop»"}, {"id": "open-design", "label": "Дизайн с OpenCode в Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-opencode", "heading": "Чем на самом деле является OpenCode", "blocks": [{"kind": "p", "text": "OpenCode — это open-source ИИ-агент для кодинга, созданный для терминала и поддерживаемый командой, стоящей за SST (Anomaly Innovations). Он читает ваш репозиторий, выполняет команды, редактирует файлы и общается с большой языковой моделью — но, в отличие от агентов, привязанных к поставщику, он не поставляет собственную модель. Вы направляете его на любого провайдера и любую модель и используете собственный ключ."}, {"kind": "p", "text": "Он работает как терминальный UI (TUI), с десктопным приложением и расширениями IDE поверх того же движка. Под капотом он использует клиент-серверную архитектуру, так что агент, который делает работу, отделён от поверхности, с которой вы им управляете. Два встроенных агента — build и plan — переключаются клавишей Tab."}, {"kind": "steps", "items": [{"label": "Независимость от моделей", "body": "Модели и провайдеры берутся из models.dev — открытого каталога. Вы настраиваете их в opencode.json строкой provider/model-id и можете отключить нежелательных провайдеров — так что тот же дизайн-процесс работает на Anthropic, OpenAI, Google, OpenRouter, локальных моделях и не только."}, {"label": "Файл инструкций", "body": "OpenCode читает файл AGENTS.md в вашем проекте (кросс-инструментальный стандарт, также совместимый с CLAUDE.md) для правил проекта — естественное место, где можно зафиксировать ваши дизайн-конвенции. Запустите /init, чтобы сгенерировать его."}, {"label": "Расширяемость", "body": "Он поддерживает интеграцию LSP, серверы MCP, темы, горячие клавиши и пользовательские команды, плюс ссылки на общие сессии для совместной работы."}]}, {"kind": "ul", "items": ["Сопровождающий: SST / Anomaly Innovations (open-source проект)", "Учётные данные: ваши собственные API-ключи провайдеров моделей — BYOK, без привязки к поставщику", "Лицензия: MIT, open source"]}]}, {"id": "why-design", "heading": "Почему открытый агент с любой моделью подходит для дизайн-работы", "blocks": [{"kind": "p", "text": "У OpenCode нет единой «дизайн-модели», как у агента, привязанного к поставщику, — и в этом весь смысл. Поскольку он независим от моделей и открыт, вы можете запускать тот же дизайн-процесс на той модели, что сейчас лучшая во фронтенде, позже сменить её или откатиться к локальной модели — и всё это без изменения настройки."}, {"kind": "p", "text": "Но один лишь выбор модели не покупает вкус. Как и любой кодинг-агент, OpenCode создаёт шаблонный UI, пока вы не дадите ему ограничения. Хороший дизайн-результат рождается из трёх вводных, которые вы предоставляете."}, {"kind": "steps", "items": [{"label": "Дизайн-система", "body": "Реальные tokens, примитивы и конвенции, которые агент переиспользует, чтобы вывод соответствовал бренду, а не сваливался в шаблонный вид."}, {"label": "Эстетический skill", "body": "Курируемый skill, навязывающий реальный вкус — сдержанная анимация, иерархия от бренда, не более двух шрифтов и одного акцентного цвета — и заставляющий агента задать направление до сборки."}, {"label": "Конкретные референсы", "body": "Реальные референсные изображения и несколько состояний (десктоп и мобильный, hover, пустое, загрузка), а не один hero-кадр."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Диаграмма, показывающая, как дизайн-система, skill и референсное изображение сходятся в хороший дизайн-результат", "caption": "Вкус рождается из трёх вводных, которые вы предоставляете: дизайн-системы, skill и реальных референсных изображений — независимо от того, какую модель вы запускаете."}, {"kind": "p", "text": "Урок: OpenCode даёт вам свободу выбора модели, но вкус по-прежнему рождается из курируемого дизайн-контекста. Open Design упаковывает именно эти вводные, поэтому они так хорошо сочетаются — оба open-source и local-first (подробнее ниже)."}]}, {"id": "setup", "heading": "Настройка OpenCode для дизайна с нуля", "blocks": [{"kind": "p", "text": "Вот полный путь от чистой машины до OpenCode, способного создавать и проверять UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Пятишаговый процесс настройки: установка, аутентификация с ключом провайдера, настройка AGENTS.md, добавление skill, проверка", "caption": "Последовательность настройки: установка → аутентификация (ваш ключ провайдера) → настройка AGENTS.md → добавление skill → проверка в настоящем браузере."}, {"kind": "steps", "items": [{"label": "Зафиксируйте свои дизайн-правила", "body": "Поместите свои tokens, примитивы и конвенции в AGENTS.md (или DESIGN.md, на который он ссылается), чтобы вывод соответствовал бренду, а не сваливался в шаблонный вид. Опция instructions в opencode.json может указывать на дополнительные файлы правил через globs."}, {"label": "Выберите способную модель", "body": "Поскольку OpenCode независим от моделей, выберите для дизайн-прохода тот provider/model, что сейчас сильнее всего во фронтенде, — и оставьте остальной процесс без изменений."}]}]}, {"id": "screenshot-workflow", "heading": "Рабочий процесс «скриншот в UI»", "blocks": [{"kind": "p", "text": "Самый эффективный дизайн-цикл с любым агентом — это превращение референсного изображения в работающий, адаптивный UI и итерация до совпадения. Та же пятишаговая форма применима в OpenCode."}, {"kind": "ol", "items": ["Начинайте с самых ясных визуальных референсов, что у вас есть, — и включайте несколько состояний (десктоп и мобильный, hover, пустое, загрузка), а не только один hero-кадр.", "Будьте конкретны в промпте; расплывчатые промпты дают шаблонный UI.", "Подготовьте дизайн-систему и подскажите OpenCode, где лежат tokens и канонические примитивы (в AGENTS.md).", "Запустите dev-сервер и заставьте агента отрисовывать результат в настоящем браузере, меняя размер до брейкпоинтов, чтобы проверить результат.", "Итерируйте, заставляя OpenCode сравнивать свою реализацию со скриншотами, а не просто подтверждать сборку."]}, {"kind": "p", "text": "Ссылайтесь на файлы через @ в TUI для нечёткого поиска по рабочей директории, выполняйте shell-команды инлайн с ведущим !, и управляйте действиями через команды /. Затем задавайте промпт с конкретными ограничениями:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Держите промпты короткими и сфокусированными, коммитьте удачные итерации и откатывайте неудачные (сообщая OpenCode об откате), чтобы каждый проход строился на чистой основе."}]}, {"id": "extend", "heading": "AGENTS.md, MCP и общие сессии", "blocks": [{"kind": "p", "text": "Три точки расширения делают OpenCode практичным для длительной дизайн-работы, и все три аккуратно ложатся на открытый дизайн-процесс."}, {"kind": "steps", "items": [{"label": "Правила AGENTS.md", "body": "Правила проекта живут в AGENTS.md в корне репозитория (или глобальные правила в ~/.config/opencode/AGENTS.md). Это устойчивый дом для ваших дизайн-конвенций, читаемый при каждом запуске, и он совместим с файлами CLAUDE.md, которые используют другие агенты."}, {"label": "Серверы MCP", "body": "OpenCode поддерживает как локальные (command), так и удалённые (URL) серверы MCP, настраиваемые под ключом mcp — переносимый способ подтянуть дизайн-контекст и внешние инструменты, работающие в разных агентах, а не только в OpenCode."}, {"label": "Общие сессии", "body": "Команда /share создаёт публичную ссылку на диалог для совместной работы или ревью, а /unshare отзывает её — полезно для получения обратной связи по дизайн-проходу."}]}, {"kind": "p", "text": "Это переносимые, мультиагентные возможности — именно то, что Open Design создан оркестрировать, а не пересоздавать в каждом проекте."}]}, {"id": "vs", "heading": "OpenCode против Codex против Claude Code против Cursor для дизайна", "blocks": [{"kind": "p", "text": "Единого победителя в дизайн-работе нет — у каждого агента своя сильная сторона, и опытные команды комбинируют их. Честная сводка:"}, {"kind": "table", "columns": ["Агент", "Сила в дизайне", "Лучше всего для"], "rows": [["OpenCode", "Open-source и независимость от моделей; запуск любого провайдера за одним терминальным процессом", "Свобода BYOK, переключение моделей, полностью открытые и local-first сетапы"], ["Codex", "Сильная визуальная отточенность с frontend skill; понимание изображений", "Делегированные асинхронные сборки в песочнице, переносимые правила AGENTS.md"], ["Claude Code", "Конкретные дизайн-решения (hex, отступы, типографика) и UX с учётом кодовой базы", "Фронтенд-рассуждения и рефакторинги с большим контекстом"], ["Cursor", "Визуальный цикл «собери и посмотри» с живым предпросмотром и инлайн-правками", "Тесная работа над UI «итерируй и наблюдай» внутри IDE"]]}, {"kind": "p", "text": "Повторяющийся вердикт сообщества: вкус исходит от людей — все они по умолчанию сваливаются в шаблонную эстетику без skills, референсов и ограничений. Вот настоящая проблема, которую нужно решить — и она по форме относится к дизайн-инструменту, а не к модели, и именно поэтому открытый агент вроде OpenCode так хорошо сочетается с открытым дизайн-слоем."}]}, {"id": "pitfalls", "heading": "Подводные камни и как избежать вида «AI slop»", "blocks": [{"kind": "p", "text": "Самая частая жалоба на дизайн, сгенерированный ИИ, в том, что он выглядит шаблонно — мягкие градиенты, плавающие панели, чрезмерно скруглённые углы, драматичные тени, вайб Inter-и-фиолетового, который «кричит, что это сделал ИИ». Среди других сообщаемых проблем — сломанные мобильные раскладки и инструкции, протекающие в текст UI. Ничто из этого не уникально для OpenCode; это то, что происходит, когда любой агент работает без курируемого дизайн-контекста."}, {"kind": "steps", "items": [{"label": "Добавьте эстетический skill", "body": "Курируемый дизайн-skill заставляет агента задать реальное направление вместо вида по умолчанию."}, {"label": "Проверяйте в настоящем браузере", "body": "Отрисовывайте и самопроверяйте результат на разных брейкпоинтах, чтобы раскладки не ломались незаметно на мобильном."}, {"label": "Предоставьте tokens и референсы", "body": "Реальные дизайн-tokens и референсные скриншоты — самый сильный рычаг для качества вывода."}, {"label": "Зафиксируйте правила в AGENTS.md", "body": "Поместите правила вроде «без hero-карточек, максимум два шрифта, иерархия от бренда» туда, где агент читает их при каждом запуске."}]}, {"kind": "p", "text": "Обратите внимание: каждое из этих средств сводится к тому, чтобы дать агенту курируемый дизайн-контекст — независимо от того, какую модель вы запускаете. Поддержка этого контекста вручную, для каждого проекта, — та рутина, которую устраняет Open Design."}]}, {"id": "open-design", "heading": "Дизайн с OpenCode внутри Open Design", "blocks": [{"kind": "p", "text": "Open Design — это тот open-source дизайн-слой, которого процесс выше постоянно требует. Он рассматривает OpenCode как нативный адаптер и оборачивает его в курируемую библиотеку skill и дизайн-систем, структурированный конвейер рендера и локальный десктопный UI — так что дизайн-контекст, делающий любого агента хорошим, есть с первого запуска, а не собирается вручную каждый раз. Оба проекта open-source и local-first, что делает их сочетание естественным."}, {"kind": "ol", "items": ["Установите Open Design и выберите OpenCode как своего агента.", "Аутентифицируйтесь с помощью собственного API-ключа провайдера моделей (BYOK) — учётные данные остаются на вашей машине и никогда не проксируются через нас.", "Выберите любого провайдера и модель, плюс дизайн-систему и skill, затем генерируйте презентации, прототипы и лендинги с единообразным вкусом.", "Каждый артефакт и файл DESIGN.md живёт в вашем собственном репозитории, а не в хостинговом облаке."]}, {"kind": "p", "text": "Тот же агент OpenCode, та же свобода выбора модели — плюс настоящий, переносимый, open-source дизайн-процесс вокруг него. Он local-first и под Apache-2.0, так что ничто из вашей работы или ваших учётных данных не покидает машину."}]}], "faqTitle": "Часто задаваемые вопросы", "faq": [{"name": "Действительно ли OpenCode способен на дизайн-работу?", "text": "Да — с эстетическим skill, дизайн-системой и реальными референсными изображениями в контексте OpenCode создаёт продакшен-качественный, адаптивный UI и может проверить его в браузере. Поскольку он независим от моделей, вы запускаете ту модель, что сейчас лучшая во фронтенде. Без такого курируемого контекста он склонен сваливаться в шаблонный вид — и именно этот разрыв закрывает Open Design."}, {"name": "Какую модель использовать с OpenCode для дизайна?", "text": "Любую на ваш вкус — OpenCode независим от провайдера через models.dev, так что вы можете запускать Anthropic, OpenAI, Google, OpenRouter или локальные модели за тем же рабочим процессом и переключаться в любой момент. Качество дизайн-вывода зависит куда больше от вашего skill, дизайн-системы и референсов, чем от одной только модели."}, {"name": "Сделан ли Open Design командой OpenCode (SST)?", "text": "Нет. Open Design — независимый open-source проект, который интегрирует OpenCode как агента. Он дополняет OpenCode local-first, открытой библиотекой skill и дизайн-систем."}, {"name": "Нужна ли специальная подписка, чтобы заниматься дизайном с OpenCode?", "text": "Нет — OpenCode работает по BYOK. Вы используете собственный API-ключ провайдера моделей, и Open Design никогда не проксирует ваши учётные данные. Привязки к поставщику нет."}, {"name": "OpenCode, Codex или Claude Code для фронтенд-дизайна?", "text": "Все сильны, и многие команды комбинируют их. Преимущество OpenCode — полная открытость и независимость от моделей; Codex блистает в делегированных сборках в песочнице; Claude Code известен конкретными, учитывающими кодовую базу дизайн-решениями. Open Design позволяет переключать агентов, не меняя дизайн-процесс."}, {"name": "Как расширить OpenCode для дизайн-контекста?", "text": "Зафиксируйте правила в AGENTS.md, добавьте серверы MCP под ключом mcp для переносимых инструментов и дизайн-контекста и используйте общие сессии для ревью. Open Design поставляет курируемую библиотеку skill и дизайн-систем, так что вы пропускаете настройку под каждый проект."}, {"name": "Связан ли Open Design с OpenCode или SST?", "text": "Нет. OpenCode — open-source проект, поддерживаемый SST (Anomaly Innovations); Open Design — независимый open-source проект, который поддерживает его как нативный адаптер."}, {"name": "В безопасности ли мои файлы и учётные данные?", "text": "Да — Open Design является local-first. Ваши файлы, артефакты и DESIGN.md остаются в вашем собственном репозитории, а ваши учётные данные провайдера моделей используются напрямую вашим агентом и никогда не маршрутизируются через серверы Open Design."}], "ctaTitle": "Дизайн с OpenCode, по-открытому.", "ctaBody": "Используйте свой ключ провайдера моделей, держите каждый файл локально и получите курируемую дизайн-библиотеку вокруг открытого агента, которым вы уже пользуетесь.", "ctaActions": [{"label": "Использовать OpenCode в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставить звезду на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Скачать десктопное приложение", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Посмотреть всех поддерживаемых агентов"}, + }, + }, + 'es': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code para diseño — Open Design", + description: "Cómo los diseñadores usan Claude Code para diseño de UI y web, y cómo Open Design lo convierte en un verdadero agente de diseño — local-first, BYOK, con una biblioteca curada de skills y sistemas de diseño.", + breadcrumb: "Claude Code", + label: "Agente · Claude Code", + heading: "Claude Code para diseño.", + lead: "Claude Code es el agente de codificación de terminal de Anthropic. La gente ya lo usa para construir interfaces, sistemas de diseño y landing pages. Open Design lo conecta a un flujo de trabajo de diseño real — usa tu clave de Anthropic o tu suscripción a Claude y mantén cada archivo en local.", + rich: {"heroCtaLead": "Open Design convierte Claude Code en un agente de diseño open-source y local-first — tu clave de Anthropic o tu suscripción a Claude, tus archivos y una biblioteca curada de skills y sistemas de diseño a su alrededor.", "heroCtaActions": [{"label": "Usa Claude Code dentro de Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dale una estrella en GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Descarga la aplicación de escritorio", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code es ampliamente considerado el agente de codificación con mejor gusto para el frontend — razona sobre las interfaces con una especificidad inusual, nombrando valores hex exactos, espaciados y escalas tipográficas, y refactoriza la UI a lo largo de una base de código grande sin perder el hilo. Pero, listo para usar, sigue derivando hacia un aspecto genérico a menos que le entregues un sistema de diseño, skills y referencias reales. Esta es una guía práctica y de extremo a extremo para usar Claude Code en trabajo de UI, frontend y sistemas de diseño, y para integrarlo en un flujo de trabajo estructurado con Open Design.", "Cubre qué es realmente Claude Code, por qué es fuerte en frontend, cómo configurarlo desde cero, el flujo de trabajo de CLAUDE.md y Skills, el round-trip oficial con Figma, cómo se compara con Codex y Cursor, los escollos que hacen que el resultado de la IA parezca genérico y cómo Open Design cierra esa brecha como una capa de diseño abierta y local-first."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Bucle de retroalimentación de diseño de Claude Code: un agente de terminal tomando decisiones de diseño específicas, un navegador renderizando la UI y un espacio de trabajo, con una flecha de retroalimentación que regresa en bucle", "caption": "El bucle central: Claude Code razona decisiones de UI específicas en la terminal, las renderiza y verifica en un navegador real, y converge contra tus referencias."}, "tocLabel": "En esta página", "toc": [{"id": "what-is-claude-code", "label": "Qué es realmente Claude Code"}, {"id": "why-design", "label": "Por qué Claude Code es bueno en diseño"}, {"id": "setup", "label": "Configura Claude Code para diseño (desde cero)"}, {"id": "skills-workflow", "label": "El flujo de trabajo de CLAUDE.md y Skills"}, {"id": "figma", "label": "Round-trip de Claude Code + Figma"}, {"id": "vs", "label": "Claude Code vs Codex vs Cursor"}, {"id": "pitfalls", "label": "Escollos y el aspecto de “bazofia de IA”"}, {"id": "open-design", "label": "Diseñar con Claude Code en Open Design"}, {"id": "faq", "label": "Preguntas frecuentes"}], "sections": [{"id": "what-is-claude-code", "heading": "Qué es realmente Claude Code", "blocks": [{"kind": "p", "text": "Claude Code es la herramienta de codificación agéntica de Anthropic. Lee tu base de código, edita archivos, ejecuta comandos y se integra con tus herramientas de desarrollo — planifica, escribe y verifica el trabajo a partir de tareas en lenguaje natural, en lugar de limitarse a autocompletar líneas."}, {"kind": "p", "text": "Se distribuye en varias superficies que comparten el mismo motor: una CLI de terminal, extensiones de IDE para VS Code, Cursor y JetBrains, una aplicación de escritorio con revisión visual de diferencias, y una experiencia web para tareas de larga duración. Tus archivos CLAUDE.md, ajustes y servidores MCP se trasladan a todas ellas."}, {"kind": "steps", "items": [{"label": "Archivo de instrucciones", "body": "Claude Code lee un archivo CLAUDE.md en la raíz de tu proyecto al inicio de cada sesión — el lugar natural para codificar tus convenciones de diseño, tokens y listas de verificación de revisión."}, {"label": "Skills", "body": "Las Agent Skills empaquetan instrucciones, scripts y recursos reutilizables que Claude carga bajo demanda, incluida la skill oficial de Frontend Design de Anthropic para el gusto."}, {"label": "Planificación y subagentes", "body": "Puede planificar antes de actuar y generar subagentes que trabajan en distintas partes de una tarea en paralelo, lo que mantiene coherentes las refactorizaciones grandes de UI."}]}, {"kind": "ul", "items": ["Proveedor: Anthropic", "Credencial: clave de API de Anthropic (BYOK, a través de la Console) o una suscripción a Claude (Pro / Max)", "Superficies: CLI de terminal, extensiones de VS Code / Cursor / JetBrains, aplicación de escritorio, web"]}]}, {"id": "why-design", "heading": "Por qué Claude Code es bueno en diseño", "blocks": [{"kind": "p", "text": "Entre los agentes de codificación, Claude Code tiene reputación de buen gusto en el trabajo de frontend. Hay varias razones que lo explican."}, {"kind": "steps", "items": [{"label": "Decisiones específicas, no vagas", "body": "Claude Code tiende a comprometerse con opciones concretas — valores hex exactos, escalas de espaciado, rampas tipográficas y jerarquía de componentes — en lugar de andar con rodeos, que es lo que separa una interfaz real de un marcador de posición."}, {"label": "Razonamiento consciente de la base de código", "body": "Con un contexto de trabajo amplio, refactoriza la UI a través de muchos archivos a la vez, reutilizando tus componentes y tokens existentes en lugar de reinventar estilos puntuales."}, {"label": "Una skill de frontend oficial", "body": "Anthropic ofrece una skill de Frontend Design que hace que Claude escriba primero una dirección de diseño y se aleje deliberadamente de las fuentes de sistema genéricas y los predecibles degradados morados."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Diagrama que muestra el sistema de diseño, la skill y la imagen de referencia convergiendo en un buen resultado de diseño", "caption": "El gusto proviene de tres insumos que tú aportas: un sistema de diseño, una skill e imágenes de referencia reales."}, {"kind": "p", "text": "La lección es la misma que Anthropic plantea sobre sus propios modelos: Claude no tiene gusto por defecto — librado a su suerte, converge hacia el centro estadístico del diseño web (Inter, degradados morados, sombras suaves). Produce buen diseño cuando le das restricciones. Open Design empaqueta exactamente esos insumos, y por eso ambos encajan (más abajo)."}]}, {"id": "setup", "heading": "Configura Claude Code para trabajo de diseño, desde cero", "blocks": [{"kind": "p", "text": "Este es el camino completo desde una máquina limpia hasta un Claude Code capaz de construir y verificar UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Flujo de configuración de cinco pasos: instalar, autenticar, configurar CLAUDE.md, añadir skill, verificar", "caption": "La secuencia de configuración: instalar → autenticar → configurar CLAUDE.md → añadir la skill de Frontend Design → habilitar la verificación en el navegador."}, {"kind": "steps", "items": [{"label": "Codifica tus reglas de diseño", "body": "Coloca tus tokens, primitivas y convenciones en CLAUDE.md y dirige a Claude hacia ellas, para que el resultado coincida con una marca en lugar de recaer en un aspecto genérico."}, {"label": "Añade verificación en el navegador", "body": "Conecta un MCP de Playwright o Chrome para que Claude renderice en un navegador real y compruebe su resultado en distintos breakpoints, en lugar de solo confirmar que la compilación pasa."}]}]}, {"id": "skills-workflow", "heading": "El flujo de trabajo de CLAUDE.md y Skills", "blocks": [{"kind": "p", "text": "El bucle de diseño de mayor apalancamiento con Claude Code es alimentarlo con referencias reales más tu contexto de diseño, y luego iterar hasta que la UI coincida — con CLAUDE.md y Skills llevando las restricciones, para que no las vuelvas a explicar en cada prompt."}, {"kind": "ol", "items": ["Parte de las referencias visuales más claras que tengas — e incluye varios estados (escritorio y móvil, hover, vacío, cargando), no solo una única toma principal.", "Sé específico en el prompt; los prompts vagos producen UI genérica incluso con un agente potente.", "Mantén tu sistema de diseño y tus convenciones en CLAUDE.md, e indícale a Claude dónde viven los tokens y las primitivas canónicas.", "Añade la skill de Frontend Design para que Claude se comprometa con una dirección estética real antes de escribir código.", "Conecta la verificación en el navegador para que Claude renderice, redimensione a los breakpoints y compare con las referencias — no solo confirme que compila."]}, {"kind": "p", "text": "Arrastra una imagen de referencia a la sesión y formula el prompt con restricciones concretas:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Ejecuta un servidor de desarrollo en paralelo, mantén los prompts pequeños y enfocados, y confirma las buenas iteraciones / revierte las malas (diciéndole a Claude cuándo reviertes) para que cada pasada parta de una base limpia. Usa el modo de planificación para refactorizaciones más grandes, de modo que puedas revisar el enfoque antes de que se modifique cualquier archivo."}]}, {"id": "figma", "heading": "Claude Code + Figma: round-trip diseño ↔ código", "blocks": [{"kind": "p", "text": "En febrero de 2026, Anthropic y Figma lanzaron una integración bidireccional de primera clase a través del servidor MCP de Figma. Funciona en ambas direcciones."}, {"kind": "steps", "items": [{"label": "Diseño → Código", "body": "Selecciona un frame en Figma o pega un enlace en Claude Code, extrae el contexto de diseño y pídele que implemente el diseño usando tu biblioteca de componentes existente. Code Connect mantiene el resultado alineado con tus componentes reales."}, {"label": "Código → Diseño", "body": "Construye y previsualiza una funcionalidad en el navegador, y luego di “Send this to Figma” para capturar la UI en ejecución como capas editables de Figma — pantalla completa o un elemento seleccionado."}]}, {"kind": "p", "text": "Instálalo una vez con claude plugin install figma@claude-plugins-official (el MCP de Dev Mode requiere un plan de pago de Figma). El mismo MCP de Figma está disponible para Claude Code, Codex, Cursor y VS Code — exactamente el tipo de capacidad portátil y multiagente que Open Design está hecho para orquestar."}]}, {"id": "vs", "heading": "Claude Code vs Codex vs Cursor para diseño", "blocks": [{"kind": "p", "text": "No hay un único ganador para el trabajo de diseño — cada agente tiene una fortaleza distinta, y los equipos con experiencia los combinan. Un resumen justo:"}, {"kind": "table", "columns": ["Agente", "Fortaleza de diseño", "Mejor para"], "rows": [["Claude Code", "Decisiones de diseño específicas (hex, espaciado, tipografía) y razonamiento de UX consciente de la base de código", "Razonamiento de frontend y refactorizaciones de gran contexto"], ["Codex", "Fuerte pulido visual y comprensión de imágenes; compilaciones asíncronas en sandbox", "Compilaciones asíncronas delegadas y reglas portátiles de AGENTS.md"], ["Cursor", "Bucle visual de construir y ver con vista previa en vivo y ediciones en línea", "Trabajo de UI ajustado de iterar y observar dentro de un IDE"]]}, {"kind": "p", "text": "El veredicto recurrente de la comunidad es que el gusto proviene de las personas: los tres recaen en una estética genérica sin skills, referencias y restricciones. Ese es el verdadero problema a resolver — y tiene forma de herramienta de diseño, no de modelo."}]}, {"id": "pitfalls", "heading": "Escollos y cómo evitar el aspecto de “bazofia de IA”", "blocks": [{"kind": "p", "text": "Incluso con la reputación de buen gusto de Claude Code, la queja más común sobre el diseño generado por IA es que parece genérico — fuentes Inter, degradados morados sobre blanco, sombras suaves, esquinas redondeadas excesivas, una estética que “grita que esto lo hizo una IA”. La propia Anthropic lo atribuye a la convergencia distribucional: las opciones seguras dominan los datos de entrenamiento web. Otros problemas reportados incluyen diseños móviles rotos e instrucciones que se filtran en el texto de la UI."}, {"kind": "steps", "items": [{"label": "Instala la skill de Frontend Design", "body": "Obliga a Claude a comprometerse con una dirección real y evita explícitamente las fuentes y degradados sobreutilizados por la IA."}, {"label": "Habilita la verificación en el navegador", "body": "Haz que Claude renderice y se autoverifique en distintos breakpoints para que los diseños no se rompan en silencio en móvil."}, {"label": "Aporta tokens y referencias", "body": "Los tokens de diseño reales y las capturas de referencia son la mayor palanca sobre la calidad del resultado."}, {"label": "Codifica reglas en CLAUDE.md", "body": "Pon reglas de estilo como “sin tarjetas hero, máximo dos tipografías, jerarquía centrada en la marca” donde el agente las lea en cada ejecución."}]}, {"kind": "p", "text": "Observa que cada mitigación consiste en dar al agente un contexto de diseño curado. Mantener ese contexto a mano, proyecto a proyecto, es el trabajo pesado que Open Design elimina."}]}, {"id": "open-design", "heading": "Diseñar con Claude Code dentro de Open Design", "blocks": [{"kind": "p", "text": "Open Design es la capa de diseño open-source que el flujo de trabajo anterior no deja de pedir. Trata a Claude Code como un adaptador de primera parte y lo envuelve en una biblioteca curada de skills y sistemas de diseño, una canalización de render estructurada y una UI de escritorio local — para que el contexto de diseño que hace bueno a Claude Code esté ahí desde la primera ejecución, no se ensamble a mano cada vez."}, {"kind": "ol", "items": ["Instala Open Design y selecciona Claude Code como tu agente.", "Autentícate con tu clave de API de Anthropic (BYOK) o tu suscripción a Claude — las credenciales permanecen en tu máquina y nunca pasan por nuestros servidores.", "Elige un sistema de diseño y una skill, y luego genera presentaciones, prototipos y landing pages con un gusto consistente.", "Cada artefacto y archivo DESIGN.md vive en tu propio repositorio, no en una nube alojada."]}, {"kind": "p", "text": "El mismo agente Claude Code, la misma clave — más un flujo de trabajo de diseño real, portátil y open-source a su alrededor. Es local-first y Apache-2.0, así que nada de tu trabajo ni de tus credenciales sale de tu máquina."}]}], "faqTitle": "Preguntas frecuentes", "faq": [{"name": "¿Es Claude Code bueno para el trabajo de diseño?", "text": "Sí — es ampliamente considerado el agente de codificación con mejor gusto para el frontend, tomando decisiones específicas y conscientes de la base de código sobre valores hex, espaciado y escalas tipográficas. Con la skill de Frontend Design, un sistema de diseño e imágenes de referencia reales en contexto, produce UI responsive de calidad de producción y puede verificarla en un navegador. Sin ese contexto tiende a recaer en un aspecto genérico, que es la brecha que Open Design cubre."}, {"name": "¿Necesito una suscripción a Claude para diseñar con Claude Code?", "text": "Puedes usar una clave de API de Anthropic (BYOK, a través de la Console) o una suscripción a Claude (Pro / Max). En cualquier caso, Open Design nunca actúa como proxy de tus credenciales — las usa directamente tu agente en tu máquina."}, {"name": "¿Claude Code o Codex para diseño de frontend?", "text": "Ambos son fuertes. Claude Code es conocido por decisiones de diseño específicas y conscientes de la base de código y por su razonamiento de frontend; Codex tiene un fuerte pulido visual y destaca en compilaciones delegadas en sandbox. Muchos equipos usan ambos — Open Design te permite cambiar de agente sin cambiar tu flujo de trabajo de diseño."}, {"name": "¿Cómo conecto Claude Code con Figma?", "text": "Instala el plugin oficial de Figma con claude plugin install figma@claude-plugins-official. Después podrás implementar frames de Figma en código usando el contexto de diseño, y enviar una UI en ejecución de vuelta a frames editables de Figma con “Send this to Figma”. El MCP de Dev Mode requiere un plan de pago de Figma."}, {"name": "¿Qué son las Skills y CLAUDE.md?", "text": "CLAUDE.md es un archivo markdown en la raíz de tu proyecto que Claude Code lee al inicio de cada sesión — el lugar para codificar tus convenciones de diseño. Las Skills empaquetan instrucciones y recursos reutilizables que Claude carga bajo demanda, incluida la skill oficial de Frontend Design de Anthropic. Open Design incluye una biblioteca curada de ambos para que te saltes la configuración por proyecto."}, {"name": "¿Cómo evito la estética genérica de “bazofia de IA”?", "text": "Instala la skill de Frontend Design, aporta tokens de diseño reales y capturas de referencia, codifica las reglas de marca en CLAUDE.md y habilita la verificación en el navegador. Open Design incluye todo esto como una biblioteca curada para que te saltes la configuración por proyecto."}, {"name": "¿Está Open Design afiliado a Anthropic?", "text": "No. Claude Code es un producto de Anthropic; Open Design es un proyecto open-source independiente que lo soporta como adaptador de primera parte. Claude y Claude Code son marcas comerciales de Anthropic."}, {"name": "¿Están seguros mis archivos y credenciales?", "text": "Sí — Open Design es local-first y Apache-2.0. Tus archivos, artefactos y DESIGN.md permanecen en tu propio repositorio, y tus credenciales de Anthropic las usa directamente tu agente, sin enrutarse nunca a través de los servidores de Open Design."}], "ctaTitle": "Diseña con Claude Code, a la manera abierta.", "ctaBody": "Usa tu propia clave de Anthropic o tu suscripción a Claude, mantén cada archivo en local y obtén una biblioteca de diseño curada alrededor del agente que ya usas.", "ctaActions": [{"label": "Usa Claude Code dentro de Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dale una estrella en GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Descarga la aplicación de escritorio", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Ver todos los agentes compatibles"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex para diseño — Open Design", + description: "Cómo la gente usa OpenAI Codex para diseño de UI y web — el plugin de Product Design, la integración con Figma, las skills de frontend — y cómo Open Design convierte a Codex en un agente de diseño open-source y local-first.", + breadcrumb: "Codex", + label: "Agente · Codex", + heading: "Codex para diseño.", + lead: "Codex es el agente de codificación de OpenAI. Con su plugin de Product Design y su integración con Figma se ha convertido en una herramienta de diseño seria. Open Design conecta a Codex con un flujo de trabajo de diseño open-source — tu clave de OpenAI o tu suscripción a ChatGPT, tus archivos, local-first.", + rich: {"heroCtaLead": "Open Design convierte a Codex en un agente de diseño open-source y local-first — tu clave de OpenAI, tus archivos y una biblioteca curada de skills y sistemas de diseño a su alrededor.", "heroCtaActions": [{"label": "Usa Codex dentro de Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dale una estrella en GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Descarga la aplicación de escritorio", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex empezó como un generador de código, pero en 2026 se convirtió en una herramienta creíble para diseñar interfaces reales — una vez que le das las referencias, skills y el bucle de verificación adecuados. Esta es una guía práctica y de extremo a extremo para usar Codex en trabajo de UI, frontend y sistemas de diseño, y para integrarlo en un flujo de trabajo de diseño estructurado con Open Design.", "Cubre qué es Codex hoy, por qué de repente es bueno en frontend, cómo configurarlo desde cero, el bucle de captura a UI, el round-trip oficial con Figma, cómo se compara con Cursor y Claude Code, los escollos que hacen que el resultado de la IA parezca genérico y cómo Open Design cierra esa brecha como una capa de diseño abierta y local-first."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Bucle de retroalimentación de diseño de Codex: un agente de terminal, un navegador renderizando la UI y un espacio de trabajo, con una flecha de retroalimentación que regresa en bucle", "caption": "El bucle central: Codex construye la UI en la terminal, la renderiza y verifica en un navegador real, e itera contra tus referencias."}, "tocLabel": "En esta página", "toc": [{"id": "what-is-codex", "label": "Qué es realmente OpenAI Codex"}, {"id": "why-design", "label": "Por qué Codex es bueno en diseño ahora"}, {"id": "setup", "label": "Configura Codex para diseño (desde cero)"}, {"id": "screenshot-workflow", "label": "El flujo de trabajo de captura a UI"}, {"id": "figma", "label": "Round-trip de Codex + Figma"}, {"id": "vs", "label": "Codex vs Cursor vs Claude Code"}, {"id": "pitfalls", "label": "Escollos y el aspecto de “bazofia de IA”"}, {"id": "open-design", "label": "Diseñar con Codex en Open Design"}, {"id": "faq", "label": "Preguntas frecuentes"}], "sections": [{"id": "what-is-codex", "heading": "Qué es realmente OpenAI Codex (y qué no es)", "blocks": [{"kind": "p", "text": "Primero, una aclaración que confunde a casi todos los que buscan “Codex”. El Codex original de OpenAI era un modelo de autocompletado de código de 2021 que impulsaba los primeros GitHub Copilot y fue descontinuado en 2023. No es de eso de lo que trata esta página. El Codex de hoy es la herramienta de codificación agéntica de OpenAI — planifica, escribe, ejecuta y verifica código a partir de tareas en lenguaje natural."}, {"kind": "p", "text": "El Codex moderno se distribuye en cuatro superficies: una CLI de terminal (reescrita en Rust, con licencia Apache-2.0), una extensión de IDE para VS Code, Cursor y Windsurf, una experiencia cloud/web para tareas asíncronas delegadas, y una aplicación de escritorio con un navegador integrado y Computer Use."}, {"kind": "steps", "items": [{"label": "Modelo por defecto", "body": "A mediados de 2026, el modelo recomendado es gpt-5.5, siendo gpt-5.4 el modelo que OpenAI entrenó explícitamente para frontend y computer use."}, {"label": "Archivo de instrucciones", "body": "Codex lee un archivo AGENTS.md en tu proyecto (un estándar entre herramientas) para las reglas del proyecto — el lugar natural para codificar tus convenciones de diseño."}, {"label": "Sandbox", "body": "Se ejecuta en un sandbox a nivel de kernel (workspace-write por defecto), de modo que un agente que edita tu UI no puede salirse del proyecto."}]}, {"kind": "ul", "items": ["Proveedor: OpenAI", "Credencial: clave de API de OpenAI (BYOK) o suscripción a ChatGPT (Free / Go / Plus / Pro / Business / Enterprise)", "Licencia de la CLI: Apache-2.0, open source"]}]}, {"id": "why-design", "heading": "Por qué Codex es bueno en diseño ahora", "blocks": [{"kind": "p", "text": "Tres cosas convergieron a principios de 2026 para convertir a Codex en una verdadera herramienta de diseño en lugar de un generador de código genérico."}, {"kind": "steps", "items": [{"label": "Un modelo entrenado para frontend", "body": "OpenAI lanzó GPT-5.4, su primer modelo principal entrenado para frontend y computer use, con una comprensión de imágenes mucho mejor en todo el flujo de diseño y una autoverificación más sólida. Incluso puede generar mood boards y opciones visuales antes de comprometerse con los assets finales."}, {"label": "Una skill de frontend oficial", "body": "El catálogo openai/skills incluye una skill de frontend curada que impone gusto real: diseños sin tarjetas, heroes a sangre completa, jerarquía centrada en la marca, movimiento contenido, como máximo dos tipografías y un color de acento — y hace que Codex escriba una tesis visual antes de construir."}, {"label": "Verificación en el navegador", "body": "Con la skill de Playwright, Codex abre un navegador real, redimensiona a los breakpoints y compara su resultado con la referencia en lugar de solo comprobar que la compilación pasa."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Diagrama que muestra el sistema de diseño, la skill y la imagen de referencia convergiendo en un buen resultado de diseño", "caption": "El gusto proviene de tres insumos que tú aportas: un sistema de diseño, una skill e imágenes de referencia reales."}, {"kind": "p", "text": "La lección detrás de las tres: Codex no tiene gusto por defecto. Produce buen diseño cuando le das restricciones — un sistema de diseño, una skill estética y referencias concretas. Open Design empaqueta exactamente esos insumos, y por eso ambos encajan (más abajo)."}]}, {"id": "setup", "heading": "Configura Codex para trabajo de diseño, desde cero", "blocks": [{"kind": "p", "text": "Este es el camino completo desde una máquina limpia hasta un Codex capaz de construir y verificar UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Flujo de configuración de cinco pasos: instalar, autenticar, configurar, instalar skill, verificar", "caption": "La secuencia de configuración: instalar → autenticar → configurar AGENTS.md → instalar la skill de frontend → habilitar la verificación en el navegador."}, {"kind": "steps", "items": [{"label": "Codifica tus reglas de diseño", "body": "Coloca tus tokens, primitivas y convenciones en AGENTS.md o en un DESIGN.md y dirige a Codex hacia ellas, para que el resultado coincida con una marca en lugar de recaer en un aspecto genérico."}, {"label": "Elige el nivel de razonamiento adecuado", "body": "OpenAI señala que los niveles de razonamiento de bajo a medio suelen producir mejores resultados de frontend que el ajuste más alto."}]}]}, {"id": "screenshot-workflow", "heading": "El flujo de trabajo de captura a UI", "blocks": [{"kind": "p", "text": "El bucle de diseño de mayor apalancamiento con Codex es convertir una imagen de referencia en una UI funcional y responsive e iterar hasta que coincida. La propia guía de OpenAI se reduce a cinco pasos."}, {"kind": "ol", "items": ["Parte de las referencias visuales más claras que tengas — e incluye varios estados (escritorio y móvil, hover, vacío, cargando), no solo una única toma principal.", "Sé específico en el prompt; los prompts vagos producen UI genérica.", "Prepara un sistema de diseño e indícale a Codex dónde viven los tokens y las primitivas canónicas.", "Habilita la skill interactiva de Playwright para que Codex renderice en un navegador real y redimensione a los breakpoints.", "Itera haciendo que Codex compare su implementación con las capturas — no solo que confirme que compila."]}, {"kind": "p", "text": "Alimenta las imágenes arrastrando una captura a la terminal o con el flag de imagen, y luego formula el prompt con restricciones concretas:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Ejecuta un servidor de desarrollo en una segunda terminal, mantén los prompts pequeños y enfocados, y confirma las buenas iteraciones / revierte las malas (diciéndole a Codex cuándo reviertes) para que cada pasada parta de una base limpia."}]}, {"id": "figma", "heading": "Codex + Figma: round-trip diseño ↔ código", "blocks": [{"kind": "p", "text": "En febrero de 2026, OpenAI y Figma anunciaron una asociación oficial, convirtiendo la beta anterior del MCP de Figma en una integración bidireccional de primera clase. Funciona en ambas direcciones."}, {"kind": "steps", "items": [{"label": "Diseño → Código", "body": "Copia el “link to selection” de un frame en Figma, pégalo en Codex con get_design_context y pídele que implemente el diseño usando tu biblioteca de componentes existente."}, {"label": "Código → Diseño", "body": "La herramienta generate_figma_design (“Code to Canvas”) convierte una UI en vivo y en ejecución de vuelta en frames editables de Figma — pantalla completa, un elemento seleccionado o un archivo entero."}]}, {"kind": "p", "text": "El MCP de Figma se ejecuta como un servidor remoto y está exento de límites de tasa. Añádelo una vez y estará disponible para Codex, Claude Code, Cursor, VS Code y más — exactamente el tipo de capacidad portátil y multiagente que Open Design está hecho para orquestar."}]}, {"id": "vs", "heading": "Codex vs Cursor vs Claude Code para diseño", "blocks": [{"kind": "p", "text": "No hay un único ganador para el trabajo de diseño — cada agente tiene una fortaleza distinta, y los equipos con experiencia los combinan. Un resumen justo:"}, {"kind": "table", "columns": ["Agente", "Fortaleza de diseño", "Mejor para"], "rows": [["Codex", "Fuerte pulido visual tras GPT-5.4 + skill de frontend; comprensión de imágenes", "Compilaciones asíncronas delegadas, ejecuciones en sandbox, reglas portátiles de AGENTS.md"], ["Cursor", "Bucle visual de construir y ver con vista previa en vivo y ediciones en línea", "Trabajo de UI ajustado de iterar y observar dentro de un IDE"], ["Claude Code", "Decisiones de diseño específicas (hex, espaciado, tipografía) y UX consciente de la base de código", "Razonamiento de frontend y refactorizaciones de gran contexto"]]}, {"kind": "p", "text": "El veredicto recurrente de la comunidad es que el gusto proviene de las personas: los tres recaen en una estética genérica sin skills, referencias y restricciones. Ese es el verdadero problema a resolver — y tiene forma de herramienta de diseño, no de modelo."}]}, {"id": "pitfalls", "heading": "Escollos y cómo evitar el aspecto de “bazofia de IA”", "blocks": [{"kind": "p", "text": "La queja más común sobre el diseño generado por Codex es que parece genérico — degradados suaves, paneles flotantes, esquinas redondeadas excesivas, sombras dramáticas, un aire de Inter-y-morado que “grita que esto lo hizo una IA”. Otros problemas reportados incluyen diseños móviles rotos, instrucciones que se filtran en el texto de la UI y alcanzar rápidamente los límites de uso."}, {"kind": "steps", "items": [{"label": "Instala una skill de frontend", "body": "Una skill estética curada obliga a Codex a comprometerse con una dirección real en lugar del aspecto por defecto."}, {"label": "Habilita la verificación con Playwright", "body": "Haz que Codex renderice y se autoverifique en distintos breakpoints para que los diseños no se rompan en silencio en móvil."}, {"label": "Aporta tokens y referencias", "body": "Los tokens de diseño reales y las capturas de referencia son la mayor palanca sobre la calidad del resultado."}, {"label": "Codifica reglas en AGENTS.md", "body": "Pon reglas de estilo como “sin tarjetas hero, máximo dos tipografías, jerarquía centrada en la marca” donde el agente las lea en cada ejecución."}]}, {"kind": "p", "text": "Observa que cada mitigación consiste en dar al agente un contexto de diseño curado. Mantener ese contexto a mano, proyecto a proyecto, es el trabajo pesado que Open Design elimina."}]}, {"id": "open-design", "heading": "Diseñar con Codex dentro de Open Design", "blocks": [{"kind": "p", "text": "Open Design es la capa de diseño open-source que el flujo de trabajo anterior no deja de pedir. Trata a Codex como un adaptador de primera parte y lo envuelve en una biblioteca curada de skills y sistemas de diseño, una canalización de render estructurada y una UI de escritorio local — para que el contexto de diseño que hace bueno a Codex esté ahí desde la primera ejecución, no se ensamble a mano cada vez."}, {"kind": "ol", "items": ["Instala Open Design y selecciona Codex como tu agente.", "Autentícate con tu clave de API de OpenAI (BYOK) o tu suscripción a ChatGPT — las credenciales permanecen en tu máquina y nunca pasan por nuestros servidores.", "Elige un sistema de diseño y una skill, y luego genera presentaciones, prototipos y landing pages con un gusto consistente.", "Cada artefacto y archivo DESIGN.md vive en tu propio repositorio, no en una nube alojada."]}, {"kind": "p", "text": "El mismo agente Codex, la misma clave — más un flujo de trabajo de diseño real, portátil y open-source a su alrededor. Es local-first y Apache-2.0, así que nada de tu trabajo ni de tus credenciales sale de tu máquina."}]}], "faqTitle": "Preguntas frecuentes", "faq": [{"name": "¿Puede OpenAI Codex realmente hacer trabajo de diseño?", "text": "Sí — con una skill de frontend, un sistema de diseño e imágenes de referencia reales en contexto, Codex (especialmente con GPT-5.4) produce UI responsive de calidad de producción y puede verificarla en un navegador. Sin ese contexto tiende a recaer en un aspecto genérico, que es la brecha que Open Design cubre."}, {"name": "¿Es este el plugin de Product Design de OpenAI Codex?", "text": "No. Open Design es un proyecto open-source independiente que integra a Codex como agente. Complementa las propias herramientas de OpenAI con una biblioteca de skills y sistemas de diseño abierta y local-first."}, {"name": "¿Necesito una suscripción a ChatGPT para diseñar con Codex?", "text": "Puedes usar una clave de API de OpenAI (BYOK) o tu suscripción a ChatGPT. El inicio de sesión con ChatGPT suele dar límites más generosos; en cualquier caso, Open Design nunca actúa como proxy de tus credenciales."}, {"name": "¿Codex o Claude Code para diseño de frontend?", "text": "Ambos son fuertes. Claude Code es conocido por decisiones de diseño específicas y conscientes de la base de código; Codex tiene un fuerte pulido visual tras GPT-5.4 y destaca en compilaciones delegadas en sandbox. Muchos equipos usan ambos — Open Design te permite cambiar de agente sin cambiar tu flujo de trabajo de diseño."}, {"name": "¿Cómo conecto Codex con Figma?", "text": "Añade el servidor MCP oficial de Figma (codex mcp add figma --url https://mcp.figma.com/mcp). Después podrás implementar frames de Figma en código con get_design_context y enviar una UI en ejecución de vuelta a frames editables de Figma con generate_figma_design."}, {"name": "¿Cómo evito la estética genérica de “bazofia de IA”?", "text": "Instala una skill de frontend, aporta tokens de diseño reales y capturas de referencia, codifica las reglas de marca en AGENTS.md y habilita la verificación con Playwright. Open Design incluye todo esto como una biblioteca curada para que te saltes la configuración por proyecto."}, {"name": "¿Está Open Design afiliado a OpenAI?", "text": "No. Codex es un producto de OpenAI; Open Design es un proyecto open-source independiente que lo soporta como adaptador de primera parte. OpenAI y Codex son marcas comerciales de OpenAI."}, {"name": "¿Están seguros mis archivos y credenciales?", "text": "Sí — Open Design es local-first. Tus archivos, artefactos y DESIGN.md permanecen en tu propio repositorio, y tus credenciales de OpenAI las usa directamente tu agente, sin enrutarse nunca a través de los servidores de Open Design."}], "ctaTitle": "Diseña con Codex, a la manera abierta.", "ctaBody": "Usa tu propia clave de OpenAI, mantén cada archivo en local y obtén una biblioteca de diseño curada alrededor del agente que ya usas.", "ctaActions": [{"label": "Usa Codex dentro de Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dale una estrella en GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Descarga la aplicación de escritorio", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Ver todos los agentes compatibles"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor para diseñadores — Open Design", + description: "Cómo los diseñadores usan Cursor para diseño de UI y web — Design Mode, Figma a código, el MCP de Figma — y cómo Open Design convierte a Cursor en un agente de diseño open-source y local-first.", + breadcrumb: "Cursor", + label: "Agente · Cursor", + heading: "Cursor para diseñadores.", + lead: "Cursor es el editor de código con IA, ahora con un Design Mode visual. Los diseñadores lo usan para editar la UI señalando y dibujando, y para convertir Figma en código. Open Design conecta a Cursor Agent con un flujo de trabajo de diseño open-source que mantiene tus archivos en local.", + rich: {"heroCtaLead": "Open Design convierte a Cursor en un agente de diseño open-source y local-first — tu cuenta de Cursor o tus claves de modelo, tus archivos y una biblioteca curada de skills y sistemas de diseño a su alrededor.", "heroCtaActions": [{"label": "Usa Cursor dentro de Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dale una estrella en GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Descarga la aplicación de escritorio", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor es el editor de código con IA primero que convirtió el “constrúyelo y míralo renderizar” en la forma por defecto de entregar UI. Con el modo Agent, ediciones en línea, una vista previa dentro del editor y Figma sobre MCP, se ha convertido en una verdadera herramienta de diseño — una vez que le das las referencias, reglas y un bucle de verificación adecuados. Esta es una guía práctica y de extremo a extremo para usar Cursor en trabajo de UI, frontend y sistemas de diseño, y para integrarlo en un flujo de trabajo de diseño estructurado con Open Design.", "Cubre qué es realmente Cursor, por qué su ajustado bucle de iterar y observar es bueno para el diseño, cómo configurarlo desde cero, el bucle de captura y vista previa a UI, el round-trip con Figma sobre MCP, cómo se compara con Codex y Claude Code, los escollos que hacen que el resultado de la IA parezca genérico y cómo Open Design cierra esa brecha como una capa de diseño abierta y local-first."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Convergencia de diseño de Cursor: el editor a la izquierda, un hub curado de skills y sistema de diseño en el centro con la marca de Cursor al medio, y una UI renderizada a la derecha", "caption": "La idea central: Cursor edita y renderiza la UI en el editor, mientras un hub de diseño curado le aporta el sistema, las skills y las referencias que hacen que el resultado parezca intencional."}, "tocLabel": "En esta página", "toc": [{"id": "what-is-cursor", "label": "Qué es realmente Cursor"}, {"id": "why-design", "label": "Por qué Cursor es bueno en diseño"}, {"id": "setup", "label": "Configura Cursor para diseño (desde cero)"}, {"id": "preview-workflow", "label": "El flujo de trabajo de vista previa a UI"}, {"id": "figma", "label": "Cursor + Figma sobre MCP"}, {"id": "vs", "label": "Cursor vs Codex vs Claude Code"}, {"id": "pitfalls", "label": "Escollos y el aspecto de “bazofia de IA”"}, {"id": "open-design", "label": "Diseñar con Cursor en Open Design"}, {"id": "faq", "label": "Preguntas frecuentes"}], "sections": [{"id": "what-is-cursor", "heading": "Qué es realmente Cursor", "blocks": [{"kind": "p", "text": "Cursor es un editor de código con IA primero construido por Anysphere. Es un fork de VS Code, por lo que conserva el editor, las extensiones y los atajos de teclado familiares, pero reconstruye el flujo de trabajo en torno a un agente de IA que puede leer todo tu proyecto, editar varios archivos, ejecutar comandos e iterar contigo en el bucle."}, {"kind": "p", "text": "Para el trabajo de diseño, las superficies importantes son el modo Agent (describes un resultado y Cursor planifica y edita a través de los archivos), las ediciones en línea y las completaciones con Tab para ajustes rápidos, una vista previa / navegador dentro del editor para que veas la UI en ejecución sin salir de la ventana, y el soporte de MCP que le permite incorporar contexto externo como un archivo de Figma en vivo."}, {"kind": "steps", "items": [{"label": "Reglas del proyecto", "body": "Cursor lee archivos de instrucciones del proyecto — reglas `.mdc` versionadas bajo `.cursor/rules`, y un `AGENTS.md` simple — para que puedas codificar tus convenciones de diseño donde el agente las lee en cada ejecución."}, {"label": "Modelos", "body": "Cursor es flexible en cuanto a modelos: viene con modelos de frontera a través de tu suscripción y también admite traer tus propias claves de modelo, así que eliges el motor detrás del mismo flujo de trabajo del editor."}, {"label": "MCP", "body": "Habla el Model Context Protocol, así que los servidores externos — el más relevante, el servidor MCP de Figma — se convierten en contexto de primera clase para el agente."}]}, {"kind": "ul", "items": ["Proveedor: Anysphere", "Credencial: cuenta / suscripción de Cursor (Hobby / Pro / Business) o tus propias claves de modelo (BYOK)", "Forma: editor de código con IA primero (fork de VS Code) con un agente y una vista previa dentro del editor"]}]}, {"id": "why-design", "heading": "Por qué Cursor es bueno en diseño", "blocks": [{"kind": "p", "text": "La ventaja de diseño de Cursor no es una sola característica — es lo ajustado del bucle de construir y ver. Tres cosas hacen que se sienta como una herramienta de diseño en lugar de un generador de código genérico."}, {"kind": "steps", "items": [{"label": "Un bucle ajustado de iterar y observar", "body": "Tú formulas el prompt, Cursor edita a través de los archivos, y la vista previa dentro del editor renderiza el resultado de inmediato — así ajustas espaciado, jerarquía y movimiento en segundos en lugar de ir y volver entre una terminal y un navegador separados."}, {"label": "Edición visual directa", "body": "Más allá del chat, Cursor te permite seleccionar elementos en la vista previa y retocar estilos, así que las pequeñas correcciones visuales se sienten como ediciones de diseño en lugar de arqueología de código."}, {"label": "Reglas del proyecto y contexto MCP", "body": "Con `.cursor/rules` (o `AGENTS.md`) y el servidor MCP de Figma, el agente trabaja contra tus tokens, componentes y especificaciones de diseño reales en lugar de adivinar."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Diagrama que muestra el sistema de diseño, la skill y la imagen de referencia convergiendo en un buen resultado de diseño", "caption": "El gusto proviene de tres insumos que tú aportas: un sistema de diseño, una skill e imágenes de referencia reales."}, {"kind": "p", "text": "La lección es la misma que enseña cada agente: Cursor no tiene gusto por defecto. Produce buen diseño cuando le das restricciones — un sistema de diseño, una skill estética y referencias concretas. Open Design empaqueta exactamente esos insumos, y por eso ambos encajan (más abajo)."}]}, {"id": "setup", "heading": "Configura Cursor para trabajo de diseño, desde cero", "blocks": [{"kind": "p", "text": "Este es el camino completo desde una máquina limpia hasta un Cursor capaz de construir, previsualizar y verificar UI contra tu sistema de diseño."}, {"kind": "ol", "items": ["Instala Cursor desde cursor.com e inicia sesión con tu cuenta de Cursor, o configura tus propias claves de modelo (BYOK) en Settings.", "Abre tu proyecto y elige un modelo en el panel de chat / Agent.", "Añade reglas del proyecto: crea `.cursor/rules/*.mdc` para convenciones estructuradas y delimitadas por globs, o un `AGENTS.md` simple para instrucciones sencillas y legibles.", "Conecta el servidor MCP de Figma (opcional) para que el agente pueda leer el contexto de diseño en vivo.", "Ejecuta tu servidor de desarrollo y usa la vista previa dentro del editor para ver y verificar la UI a medida que iteras."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Flujo de configuración de cinco pasos: instalar, autenticar, configurar reglas, añadir skill, verificar", "caption": "La secuencia de configuración: instalar → autenticar → configurar las reglas del proyecto → añadir una skill → habilitar la verificación con vista previa."}, {"kind": "p", "text": "Un archivo mínimo de reglas del proyecto hace que el agente diseñe para una marca en lugar de recaer en un aspecto genérico. Ponlo donde Cursor lo lea en cada ejecución:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Codifica tus reglas de diseño", "body": "Coloca tus tokens, primitivas y convenciones en `.cursor/rules` o `AGENTS.md` y dirige a Cursor hacia ellas, para que el resultado coincida con una marca en lugar de recaer en un aspecto genérico."}, {"label": "Mantén los prompts pequeños", "body": "El bucle ajustado de Cursor recompensa las peticiones enfocadas — itera un componente o estado a la vez y observa la vista previa entre pasadas."}]}]}, {"id": "preview-workflow", "heading": "El flujo de trabajo de vista previa a UI", "blocks": [{"kind": "p", "text": "El bucle de diseño de mayor apalancamiento con Cursor es convertir una referencia en una UI funcional y responsive e iterar en el editor hasta que coincida — observando la vista previa en vivo todo el tiempo en lugar de adivinar."}, {"kind": "ol", "items": ["Parte de las referencias visuales más claras que tengas — e incluye varios estados (escritorio y móvil, hover, vacío, cargando), no solo una única toma principal.", "Sé específico en el prompt; los prompts vagos producen UI genérica.", "Prepara un sistema de diseño e indícale a Cursor dónde viven los tokens y las primitivas canónicas.", "Mantén abierta la vista previa dentro del editor y tu servidor de desarrollo en marcha para que cada edición renderice de inmediato en los breakpoints que te importan.", "Itera comparando la UI renderizada con las referencias — y usa la selección directa de elementos en la vista previa para pequeñas correcciones visuales."]}, {"kind": "p", "text": "Alimenta las referencias adjuntando una imagen al chat, y luego formula el prompt con restricciones concretas:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Confirma las buenas iteraciones y revierte las malas (diciéndole a Cursor cuándo reviertes) para que cada pasada parta de una base limpia — la misma disciplina que evita que cualquier bucle de agente derive."}]}, {"id": "figma", "heading": "Cursor + Figma: diseño ↔ código sobre MCP", "blocks": [{"kind": "p", "text": "Cursor se conecta a Figma a través del servidor MCP oficial de Figma, que da al agente acceso estructurado a un archivo de Figma en vivo en lugar de una captura plana. Eso elimina las conjeturas del handoff."}, {"kind": "steps", "items": [{"label": "Diseño → Código", "body": "Copia el enlace de un frame en Figma, pégalo en Cursor y pídele que implemente el diseño. El servidor MCP expone contexto de diseño real — componentes, variables, datos de layout, tokens — para que el código generado coincida con la fuente en lugar de aproximarla."}, {"label": "Mantente alineado", "body": "Con los tokens de diseño, estilos y componentes usados de forma consistente en Figma (y Code Connect donde esté disponible), el resultado de Cursor permanece mapeado a tu sistema de diseño real en lugar de reinventar primitivas."}]}, {"kind": "p", "text": "Configura una vez el servidor MCP remoto de Figma y estará disponible para Cursor como contexto de primera clase. Como MCP es un estándar abierto, el mismo servidor es reutilizable en Cursor, Claude Code, Codex y VS Code — exactamente el tipo de capacidad portátil y multiagente que Open Design está hecho para orquestar."}]}, {"id": "vs", "heading": "Cursor vs Codex vs Claude Code para diseño", "blocks": [{"kind": "p", "text": "No hay un único ganador para el trabajo de diseño — cada agente tiene una fortaleza distinta, y los equipos con experiencia los combinan. Un resumen justo:"}, {"kind": "table", "columns": ["Agente", "Fortaleza de diseño", "Mejor para"], "rows": [["Cursor", "Bucle visual de construir y ver con vista previa en vivo dentro del editor y edición directa de elementos", "Trabajo de UI ajustado de iterar y observar dentro de un IDE"], ["Codex", "Fuerte pulido visual con una skill de frontend; comprensión de imágenes y ejecuciones en sandbox", "Compilaciones asíncronas delegadas y reglas portátiles de AGENTS.md"], ["Claude Code", "Decisiones de diseño específicas (hex, espaciado, tipografía) y UX consciente de la base de código", "Razonamiento de frontend y refactorizaciones de gran contexto"]]}, {"kind": "p", "text": "El veredicto recurrente de la comunidad es que el gusto proviene de las personas: los tres recaen en una estética genérica sin skills, referencias y restricciones. Ese es el verdadero problema a resolver — y tiene forma de herramienta de diseño, no de modelo."}]}, {"id": "pitfalls", "heading": "Escollos y cómo evitar el aspecto de “bazofia de IA”", "blocks": [{"kind": "p", "text": "La queja más común sobre el diseño generado por Cursor es que parece genérico — degradados suaves, paneles flotantes, esquinas redondeadas excesivas, sombras dramáticas, un aire de Inter-y-morado que “grita que esto lo hizo una IA”. Otros problemas reportados incluyen diseños que se rompen en móvil e instrucciones que se filtran en el texto de la UI."}, {"kind": "steps", "items": [{"label": "Añade una skill de diseño", "body": "Una skill estética curada obliga a Cursor a comprometerse con una dirección real en lugar del aspecto por defecto."}, {"label": "Usa la vista previa para verificar", "body": "Renderiza y autoverifica en distintos breakpoints en la vista previa dentro del editor para que los diseños no se rompan en silencio en móvil."}, {"label": "Aporta tokens y referencias", "body": "Los tokens de diseño reales y las capturas de referencia son la mayor palanca sobre la calidad del resultado."}, {"label": "Codifica reglas en `.cursor/rules`", "body": "Pon reglas de estilo como “sin tarjetas hero, máximo dos tipografías, jerarquía centrada en la marca” donde el agente las lea en cada ejecución."}]}, {"kind": "p", "text": "Observa que cada mitigación consiste en dar al agente un contexto de diseño curado. Mantener ese contexto a mano, proyecto a proyecto, es el trabajo pesado que Open Design elimina."}]}, {"id": "open-design", "heading": "Diseñar con Cursor dentro de Open Design", "blocks": [{"kind": "p", "text": "Open Design es la capa de diseño open-source que el flujo de trabajo anterior no deja de pedir. Trata a Cursor como un adaptador de primera parte y lo envuelve en una biblioteca curada de skills y sistemas de diseño, una canalización de render estructurada y una UI de escritorio local — para que el contexto de diseño que hace bueno a Cursor esté ahí desde la primera ejecución, no se ensamble a mano cada vez."}, {"kind": "ol", "items": ["Instala Open Design y selecciona Cursor como tu agente.", "Autentícate con tu cuenta de Cursor o tus propias claves de modelo (BYOK) — las credenciales permanecen en tu máquina y nunca pasan por nuestros servidores.", "Elige un sistema de diseño y una skill, y luego genera presentaciones, prototipos y landing pages con un gusto consistente.", "Cada artefacto y archivo DESIGN.md vive en tu propio repositorio, no en una nube alojada."]}, {"kind": "p", "text": "El mismo agente Cursor, la misma clave — más un flujo de trabajo de diseño real, portátil y open-source a su alrededor. Es local-first y Apache-2.0, así que nada de tu trabajo ni de tus credenciales sale de tu máquina."}]}], "faqTitle": "Preguntas frecuentes", "faq": [{"name": "¿Puede Cursor realmente hacer trabajo de diseño?", "text": "Sí — con una skill de diseño, un sistema de diseño e imágenes de referencia reales en contexto, Cursor produce UI responsive de calidad de producción, y su vista previa dentro del editor te permite verificarla y refinarla visualmente. Sin ese contexto tiende a recaer en un aspecto genérico, que es la brecha que Open Design cubre."}, {"name": "¿Es este un producto oficial de Cursor?", "text": "No. Open Design es un proyecto open-source independiente que integra a Cursor como agente. Complementa a Cursor con una biblioteca de skills y sistemas de diseño abierta y local-first."}, {"name": "¿Necesito una suscripción a Cursor para diseñar con Cursor?", "text": "Puedes usar una cuenta / suscripción de Cursor o traer tus propias claves de modelo (BYOK). Open Design nunca actúa como proxy de tus credenciales en ningún caso — las usa directamente tu agente."}, {"name": "¿Cursor o Claude Code para diseño de frontend?", "text": "Ambos son fuertes. Claude Code es conocido por decisiones de diseño específicas y conscientes de la base de código; la ventaja de Cursor es su ajustado bucle de construir y ver con una vista previa en vivo dentro del editor. Muchos equipos usan ambos — Open Design te permite cambiar de agente sin cambiar tu flujo de trabajo de diseño."}, {"name": "¿Cómo conecto Cursor con Figma?", "text": "Añade el servidor MCP oficial de Figma en Cursor, luego pega un enlace de un frame de Figma en el chat y pídele a Cursor que lo implemente. El servidor expone componentes, variables y datos de layout reales para que el código generado coincida con el diseño fuente."}, {"name": "¿Cómo evito la estética genérica de “bazofia de IA”?", "text": "Añade una skill de diseño, aporta tokens de diseño reales y capturas de referencia, codifica las reglas de marca en `.cursor/rules` o `AGENTS.md`, y verifica en distintos breakpoints en la vista previa. Open Design incluye todo esto como una biblioteca curada para que te saltes la configuración por proyecto."}, {"name": "¿Está Open Design afiliado a Cursor o Anysphere?", "text": "No. Cursor es un producto de Anysphere; Open Design es un proyecto open-source independiente que lo soporta como adaptador de primera parte. Cursor y Anysphere son marcas comerciales de Anysphere, Inc."}, {"name": "¿Están seguros mis archivos y credenciales?", "text": "Sí — Open Design es local-first. Tus archivos, artefactos y DESIGN.md permanecen en tu propio repositorio, y tus credenciales de Cursor o de modelo las usa directamente tu agente, sin enrutarse nunca a través de los servidores de Open Design."}], "ctaTitle": "Diseña con Cursor, a la manera abierta.", "ctaBody": "Usa tu propia cuenta de Cursor o claves de modelo, mantén cada archivo en local y obtén una biblioteca de diseño curada alrededor del agente que ya usas.", "ctaActions": [{"label": "Usa Cursor dentro de Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dale una estrella en GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Descarga la aplicación de escritorio", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Ver todos los agentes compatibles"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode para diseño — Open Design", + description: "Cómo la gente usa OpenCode para diseño de UI y web — archivos design.md, skills de UI/UX, MCP de Figma — y cómo Open Design convierte a OpenCode en un agente de diseño open-source y local-first.", + breadcrumb: "OpenCode", + label: "Agente · OpenCode", + heading: "OpenCode para diseño.", + lead: "OpenCode es el agente de codificación con IA de terminal y open-source. Los diseñadores le acoplan skills de diseño y archivos DESIGN.md para generar UI real. Open Design lo convierte en un flujo de trabajo estructurado y open-source — usa tus claves de proveedor y mantén todo en local.", + rich: {"heroCtaLead": "Open Design convierte a OpenCode en un agente de diseño open-source y local-first — cualquier modelo que elijas con tu propia clave de proveedor, tus archivos y una biblioteca curada de skills y sistemas de diseño a su alrededor.", "heroCtaActions": [{"label": "Usa OpenCode dentro de Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dale una estrella en GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Descarga la aplicación de escritorio", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode es un agente de codificación con IA, open-source y orientado a la terminal, que es deliberadamente agnóstico respecto al modelo: traes tu propia clave de proveedor y ejecutas el modelo que quieras detrás del mismo flujo de trabajo. Esa apertura lo convierte en una base natural para el trabajo de diseño — pero, como todo agente, solo produce buena UI cuando le das las referencias, skills y un bucle de verificación adecuados. Esta es una guía práctica y de extremo a extremo para usar OpenCode en trabajo de UI, frontend y sistemas de diseño, y para integrarlo en un flujo de trabajo de diseño estructurado con Open Design.", "Cubre qué es realmente OpenCode, por qué un agente abierto y agnóstico respecto al modelo encaja bien con el diseño, cómo configurarlo desde cero, el bucle de captura a UI, cómo AGENTS.md y MCP lo extienden, cómo se compara con Codex, Claude Code y Cursor, los escollos que hacen que el resultado de la IA parezca genérico y cómo Open Design cierra esa brecha como una capa de diseño abierta y local-first — un emparejamiento natural, ya que ambos proyectos son open-source y se ejecutan en tu propia máquina."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "Bucle de retroalimentación de diseño de OpenCode: un agente TUI de terminal, un navegador renderizando la UI y un espacio de trabajo, con una flecha de retroalimentación que regresa en bucle", "caption": "El bucle central: OpenCode construye la UI en la terminal, la renderiza y verifica en un navegador real, e itera contra tus referencias — con el modelo que elijas."}, "tocLabel": "En esta página", "toc": [{"id": "what-is-opencode", "label": "Qué es realmente OpenCode"}, {"id": "why-design", "label": "Por qué un agente abierto y de cualquier modelo encaja con el diseño"}, {"id": "setup", "label": "Configura OpenCode para diseño (desde cero)"}, {"id": "screenshot-workflow", "label": "El flujo de trabajo de captura a UI"}, {"id": "extend", "label": "AGENTS.md, MCP y sesiones compartibles"}, {"id": "vs", "label": "OpenCode vs Codex vs Claude Code vs Cursor"}, {"id": "pitfalls", "label": "Escollos y el aspecto de “bazofia de IA”"}, {"id": "open-design", "label": "Diseñar con OpenCode en Open Design"}, {"id": "faq", "label": "Preguntas frecuentes"}], "sections": [{"id": "what-is-opencode", "heading": "Qué es realmente OpenCode", "blocks": [{"kind": "p", "text": "OpenCode es un agente de codificación con IA open-source construido para la terminal, mantenido por el equipo detrás de SST (Anomaly Innovations). Lee tu repositorio, ejecuta comandos, edita archivos y se comunica con un modelo de lenguaje grande — pero, a diferencia de los agentes atados a un proveedor, no incluye su propio modelo. Lo apuntas a cualquier proveedor y modelo que quieras y traes tu propia clave."}, {"kind": "p", "text": "Se ejecuta como una UI de terminal (TUI), con una aplicación de escritorio y extensiones de IDE sobre el mismo motor. Por debajo usa una arquitectura cliente/servidor, así que el agente que hace el trabajo está desacoplado de la superficie desde la que lo controlas. Dos agentes integrados — build y plan — se alternan con la tecla Tab."}, {"kind": "steps", "items": [{"label": "Agnóstico respecto al modelo", "body": "Los modelos y proveedores provienen de models.dev, un catálogo abierto. Los configuras en opencode.json con una cadena provider/model-id y puedes deshabilitar los proveedores que no quieras cargar — así el mismo flujo de trabajo de diseño se ejecuta sobre Anthropic, OpenAI, Google, OpenRouter, modelos locales y más."}, {"label": "Archivo de instrucciones", "body": "OpenCode lee un archivo AGENTS.md en tu proyecto (el estándar entre herramientas, también compatible con CLAUDE.md) para las reglas del proyecto — el lugar natural para codificar tus convenciones de diseño. Ejecuta /init para generar uno."}, {"label": "Extensible", "body": "Admite integración con LSP, servidores MCP, temas, atajos de teclado y comandos personalizados, además de enlaces de sesión compartibles para la colaboración."}]}, {"kind": "ul", "items": ["Mantenedor: SST / Anomaly Innovations (proyecto open-source)", "Credencial: tu(s) propia(s) clave(s) de API de proveedor de modelos — BYOK, sin atadura a un proveedor", "Licencia: MIT, open source"]}]}, {"id": "why-design", "heading": "Por qué un agente abierto y de cualquier modelo encaja con el trabajo de diseño", "blocks": [{"kind": "p", "text": "OpenCode no tiene un único “modelo de diseño” como sí lo tiene un agente de proveedor — y ese es el punto. Como es agnóstico respecto al modelo y abierto, puedes ejecutar el mismo flujo de trabajo de diseño sobre el modelo que actualmente sea mejor en frontend, cambiarlo después o recurrir a un modelo local, todo sin cambiar tu configuración."}, {"kind": "p", "text": "Pero la elección del modelo por sí sola no compra gusto. Como todo agente de codificación, OpenCode produce UI genérica a menos que le des restricciones. El buen resultado de diseño proviene de tres insumos que tú aportas."}, {"kind": "steps", "items": [{"label": "Un sistema de diseño", "body": "Tokens, primitivas y convenciones reales que el agente reutiliza, para que el resultado coincida con una marca en lugar de recaer en un aspecto genérico."}, {"label": "Una skill estética", "body": "Una skill curada que impone gusto real — movimiento contenido, jerarquía centrada en la marca, como máximo dos tipografías y un color de acento — y hace que el agente se comprometa con una dirección antes de construir."}, {"label": "Referencias concretas", "body": "Imágenes de referencia reales y varios estados (escritorio y móvil, hover, vacío, cargando), no una única toma principal."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Diagrama que muestra el sistema de diseño, la skill y la imagen de referencia convergiendo en un buen resultado de diseño", "caption": "El gusto proviene de tres insumos que tú aportas: un sistema de diseño, una skill e imágenes de referencia reales — con independencia del modelo que ejecutes."}, {"kind": "p", "text": "La lección: OpenCode te da libertad de modelo, pero el gusto sigue proviniendo de un contexto de diseño curado. Open Design empaqueta exactamente esos insumos, y por eso ambos encajan — los dos son open-source y local-first (más abajo)."}]}, {"id": "setup", "heading": "Configura OpenCode para trabajo de diseño, desde cero", "blocks": [{"kind": "p", "text": "Este es el camino completo desde una máquina limpia hasta un OpenCode capaz de construir y verificar UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Flujo de configuración de cinco pasos: instalar, autenticar con tu clave de proveedor, configurar AGENTS.md, añadir una skill, verificar", "caption": "La secuencia de configuración: instalar → autenticar (tu clave de proveedor) → configurar AGENTS.md → añadir una skill → verificar en un navegador real."}, {"kind": "steps", "items": [{"label": "Codifica tus reglas de diseño", "body": "Coloca tus tokens, primitivas y convenciones en AGENTS.md (o en un DESIGN.md referenciado desde él) para que el resultado coincida con una marca en lugar de recaer en un aspecto genérico. La opción instructions de opencode.json puede apuntar a archivos de reglas adicionales mediante globs."}, {"label": "Elige un modelo capaz", "body": "Como OpenCode es agnóstico respecto al modelo, elige el proveedor/modelo que actualmente sea más fuerte en frontend para la pasada de diseño — y mantén el resto de tu flujo de trabajo sin cambios."}]}]}, {"id": "screenshot-workflow", "heading": "El flujo de trabajo de captura a UI", "blocks": [{"kind": "p", "text": "El bucle de diseño de mayor apalancamiento con cualquier agente es convertir una imagen de referencia en una UI funcional y responsive e iterar hasta que coincida. La misma forma de cinco pasos aplica en OpenCode."}, {"kind": "ol", "items": ["Parte de las referencias visuales más claras que tengas — e incluye varios estados (escritorio y móvil, hover, vacío, cargando), no solo una única toma principal.", "Sé específico en el prompt; los prompts vagos producen UI genérica.", "Prepara un sistema de diseño e indícale a OpenCode dónde viven los tokens y las primitivas canónicas (en AGENTS.md).", "Ejecuta un servidor de desarrollo y haz que el agente renderice en un navegador real, redimensionando a los breakpoints para comprobar el resultado.", "Itera haciendo que OpenCode compare su implementación con las capturas — no solo que confirme que compila."]}, {"kind": "p", "text": "Referencia archivos con @ en la TUI para una búsqueda difusa de tu directorio de trabajo, ejecuta comandos de shell en línea con un ! inicial, y dirige las acciones con comandos /. Luego formula el prompt con restricciones concretas:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Mantén los prompts pequeños y enfocados, confirma las buenas iteraciones y revierte las malas (diciéndole a OpenCode cuándo reviertes), para que cada pasada parta de una base limpia."}]}, {"id": "extend", "heading": "AGENTS.md, MCP y sesiones compartibles", "blocks": [{"kind": "p", "text": "Tres puntos de extensión hacen a OpenCode práctico para el trabajo de diseño sostenido, y los tres se mapean limpiamente sobre un flujo de trabajo de diseño abierto."}, {"kind": "steps", "items": [{"label": "Reglas de AGENTS.md", "body": "Las reglas del proyecto viven en un AGENTS.md en la raíz del repositorio (o reglas globales en ~/.config/opencode/AGENTS.md). Es el hogar duradero de tus convenciones de diseño, leído en cada ejecución, y es compatible con los archivos CLAUDE.md que usan otros agentes."}, {"label": "Servidores MCP", "body": "OpenCode admite servidores MCP tanto locales (command) como remotos (URL), configurados bajo la clave mcp — la forma portátil de incorporar contexto de diseño y herramientas externas que funcionan en todos los agentes, no solo en OpenCode."}, {"label": "Sesiones compartibles", "body": "El comando /share crea un enlace público a una conversación para colaboración o revisión, y /unshare lo revoca — útil para obtener feedback sobre una pasada de diseño."}]}, {"kind": "p", "text": "Estas son capacidades portátiles y multiagente — exactamente el tipo de cosa que Open Design está hecho para orquestar, en lugar de recrear en cada proyecto."}]}, {"id": "vs", "heading": "OpenCode vs Codex vs Claude Code vs Cursor para diseño", "blocks": [{"kind": "p", "text": "No hay un único ganador para el trabajo de diseño — cada agente tiene una fortaleza distinta, y los equipos con experiencia los combinan. Un resumen justo:"}, {"kind": "table", "columns": ["Agente", "Fortaleza de diseño", "Mejor para"], "rows": [["OpenCode", "Open-source y agnóstico respecto al modelo; ejecuta cualquier proveedor detrás de un único flujo de trabajo de terminal", "Libertad BYOK, cambio de modelo, configuraciones totalmente abiertas y local-first"], ["Codex", "Fuerte pulido visual con una skill de frontend; comprensión de imágenes", "Async delegado, compilaciones en sandbox, reglas portátiles de AGENTS.md"], ["Claude Code", "Decisiones de diseño específicas (hex, espaciado, tipografía) y UX consciente de la base de código", "Razonamiento de frontend y refactorizaciones de gran contexto"], ["Cursor", "Bucle visual de construir y ver con vista previa en vivo y ediciones en línea", "Trabajo de UI ajustado de iterar y observar dentro de un IDE"]]}, {"kind": "p", "text": "El veredicto recurrente de la comunidad es que el gusto proviene de las personas: todos recaen en una estética genérica sin skills, referencias y restricciones. Ese es el verdadero problema a resolver — y tiene forma de herramienta de diseño, no de modelo, que es precisamente por lo que un agente abierto como OpenCode encaja tan bien con una capa de diseño abierta."}]}, {"id": "pitfalls", "heading": "Escollos y cómo evitar el aspecto de “bazofia de IA”", "blocks": [{"kind": "p", "text": "La queja más común sobre el diseño generado por IA es que parece genérico — degradados suaves, paneles flotantes, esquinas redondeadas excesivas, sombras dramáticas, un aire de Inter-y-morado que “grita que esto lo hizo una IA”. Otros problemas reportados incluyen diseños móviles rotos e instrucciones que se filtran en el texto de la UI. Ninguno de estos es exclusivo de OpenCode; son lo que ocurre cuando cualquier agente se ejecuta sin un contexto de diseño curado."}, {"kind": "steps", "items": [{"label": "Añade una skill estética", "body": "Una skill de diseño curada obliga al agente a comprometerse con una dirección real en lugar del aspecto por defecto."}, {"label": "Verifica en un navegador real", "body": "Renderiza y autoverifica en distintos breakpoints para que los diseños no se rompan en silencio en móvil."}, {"label": "Aporta tokens y referencias", "body": "Los tokens de diseño reales y las capturas de referencia son la mayor palanca sobre la calidad del resultado."}, {"label": "Codifica reglas en AGENTS.md", "body": "Pon reglas de estilo como “sin tarjetas hero, máximo dos tipografías, jerarquía centrada en la marca” donde el agente las lea en cada ejecución."}]}, {"kind": "p", "text": "Observa que cada mitigación consiste en dar al agente un contexto de diseño curado — sin importar qué modelo ejecutes. Mantener ese contexto a mano, proyecto a proyecto, es el trabajo pesado que Open Design elimina."}]}, {"id": "open-design", "heading": "Diseñar con OpenCode dentro de Open Design", "blocks": [{"kind": "p", "text": "Open Design es la capa de diseño open-source que el flujo de trabajo anterior no deja de pedir. Trata a OpenCode como un adaptador de primera parte y lo envuelve en una biblioteca curada de skills y sistemas de diseño, una canalización de render estructurada y una UI de escritorio local — para que el contexto de diseño que hace bueno a cualquier agente esté ahí desde la primera ejecución, no se ensamble a mano cada vez. Ambos proyectos son open-source y local-first, lo que hace que el emparejamiento sea un encaje natural."}, {"kind": "ol", "items": ["Instala Open Design y selecciona OpenCode como tu agente.", "Autentícate con tu propia clave de API de proveedor de modelos (BYOK) — las credenciales permanecen en tu máquina y nunca pasan por nuestros servidores.", "Elige cualquier proveedor y modelo, además de un sistema de diseño y una skill, y luego genera presentaciones, prototipos y landing pages con un gusto consistente.", "Cada artefacto y archivo DESIGN.md vive en tu propio repositorio, no en una nube alojada."]}, {"kind": "p", "text": "El mismo agente OpenCode, la misma libertad de modelo — más un flujo de trabajo de diseño real, portátil y open-source a su alrededor. Es local-first y Apache-2.0, así que nada de tu trabajo ni de tus credenciales sale de tu máquina."}]}], "faqTitle": "Preguntas frecuentes", "faq": [{"name": "¿Puede OpenCode realmente hacer trabajo de diseño?", "text": "Sí — con una skill estética, un sistema de diseño e imágenes de referencia reales en contexto, OpenCode produce UI responsive de calidad de producción y puede verificarla en un navegador. Como es agnóstico respecto al modelo, ejecutas el modelo que actualmente sea mejor en frontend. Sin ese contexto curado tiende a recaer en un aspecto genérico, que es la brecha que Open Design cubre."}, {"name": "¿Qué modelo debería usar con OpenCode para diseño?", "text": "El que prefieras — OpenCode es agnóstico respecto al proveedor a través de models.dev, así que puedes ejecutar Anthropic, OpenAI, Google, OpenRouter o modelos locales detrás del mismo flujo de trabajo y cambiar en cualquier momento. La calidad del resultado de diseño depende mucho más de tu skill, tu sistema de diseño y tus referencias que del modelo por sí solo."}, {"name": "¿Open Design está hecho por el equipo de OpenCode (SST)?", "text": "No. Open Design es un proyecto open-source independiente que integra a OpenCode como agente. Complementa a OpenCode con una biblioteca de skills y sistemas de diseño abierta y local-first."}, {"name": "¿Necesito una suscripción especial para diseñar con OpenCode?", "text": "No — OpenCode es BYOK. Traes tu propia clave de API de proveedor de modelos, y Open Design nunca actúa como proxy de tus credenciales. No hay atadura a un proveedor."}, {"name": "¿OpenCode, Codex o Claude Code para diseño de frontend?", "text": "Todos son fuertes, y muchos equipos los combinan. La ventaja de OpenCode es ser totalmente open-source y agnóstico respecto al modelo; Codex destaca en compilaciones delegadas en sandbox; Claude Code es conocido por decisiones de diseño específicas y conscientes de la base de código. Open Design te permite cambiar de agente sin cambiar tu flujo de trabajo de diseño."}, {"name": "¿Cómo extiendo OpenCode para el contexto de diseño?", "text": "Codifica reglas en AGENTS.md, añade servidores MCP bajo la clave mcp para herramientas portátiles y contexto de diseño, y usa sesiones compartibles para la revisión. Open Design incluye una biblioteca curada de skills y sistemas de diseño para que te saltes la configuración por proyecto."}, {"name": "¿Está Open Design afiliado a OpenCode o SST?", "text": "No. OpenCode es un proyecto open-source mantenido por SST (Anomaly Innovations); Open Design es un proyecto open-source independiente que lo soporta como adaptador de primera parte."}, {"name": "¿Están seguros mis archivos y credenciales?", "text": "Sí — Open Design es local-first. Tus archivos, artefactos y DESIGN.md permanecen en tu propio repositorio, y tus credenciales de proveedor de modelos las usa directamente tu agente, sin enrutarse nunca a través de los servidores de Open Design."}], "ctaTitle": "Diseña con OpenCode, a la manera abierta.", "ctaBody": "Usa tu propia clave de proveedor de modelos, mantén cada archivo en local y obtén una biblioteca de diseño curada alrededor del agente abierto que ya usas.", "ctaActions": [{"label": "Usa OpenCode dentro de Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dale una estrella en GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Descarga la aplicación de escritorio", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Ver todos los agentes compatibles"}, + }, + }, + 'pt-br': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code para design — Open Design", + description: "Como designers usam o Claude Code para design de UI e web, e como o Open Design o transforma em um verdadeiro agente de design — local-first, BYOK, com uma biblioteca curada de skills e design systems.", + breadcrumb: "Claude Code", + label: "Agente · Claude Code", + heading: "Claude Code para design.", + lead: "O Claude Code é o agente de programação no terminal da Anthropic. As pessoas já o usam para criar UIs, design systems e landing pages. O Open Design o conecta a um fluxo de design real — traga sua chave da Anthropic ou sua assinatura do Claude e mantenha cada arquivo local.", + rich: {"heroCtaLead": "O Open Design transforma o Claude Code em um agente de design local-first e open-source — sua chave da Anthropic ou assinatura do Claude, seus arquivos, com uma biblioteca curada de skills e design systems ao redor.", "heroCtaActions": [{"label": "Use o Claude Code dentro do Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dê uma estrela no GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Baixe o aplicativo desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["O Claude Code é amplamente considerado o agente de programação com o melhor bom gosto em frontend — ele raciocina sobre interfaces com uma especificidade incomum, nomeando valores hex exatos, espaçamentos e escalas tipográficas, e refatora UI em uma base de código grande sem perder o fio da meada. Mas, de saída, ele ainda tende a derivar para uma aparência genérica, a menos que você lhe forneça um design system, skills e referências reais. Este é um guia prático e completo para usar o Claude Code em trabalho de UI, frontend e design system, e para conectá-lo a um fluxo estruturado com o Open Design.", "Ele cobre o que o Claude Code realmente é, por que ele é forte em frontend, como configurá-lo do zero, o fluxo de CLAUDE.md e Skills, a integração oficial de ida e volta com o Figma, como ele se compara ao Codex e ao Cursor, as armadilhas que fazem a saída de IA parecer genérica e como o Open Design fecha essa lacuna como uma camada de design aberta e local-first."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Loop de feedback de design do Claude Code: o agente no terminal tomando decisões de design específicas, um navegador renderizando a UI e um espaço de trabalho, com uma seta de feedback voltando ao início", "caption": "O loop central: o Claude Code raciocina sobre decisões de UI específicas no terminal, renderiza e as verifica em um navegador real e converge em direção às suas referências."}, "tocLabel": "Nesta página", "toc": [{"id": "what-is-claude-code", "label": "O que o Claude Code realmente é"}, {"id": "why-design", "label": "Por que o Claude Code é bom em design"}, {"id": "setup", "label": "Configure o Claude Code para design (do zero)"}, {"id": "skills-workflow", "label": "O fluxo de CLAUDE.md e Skills"}, {"id": "figma", "label": "Integração de ida e volta Claude Code + Figma"}, {"id": "vs", "label": "Claude Code vs Codex vs Cursor"}, {"id": "pitfalls", "label": "Armadilhas e a aparência de “lixo de IA”"}, {"id": "open-design", "label": "Projetando com o Claude Code no Open Design"}, {"id": "faq", "label": "Perguntas frequentes"}], "sections": [{"id": "what-is-claude-code", "heading": "O que o Claude Code realmente é", "blocks": [{"kind": "p", "text": "O Claude Code é a ferramenta de programação agêntica da Anthropic. Ele lê sua base de código, edita arquivos, executa comandos e se integra às suas ferramentas de desenvolvimento — planejando, escrevendo e verificando o trabalho a partir de tarefas em linguagem natural, em vez de apenas autocompletar linhas."}, {"kind": "p", "text": "Ele está disponível em várias superfícies que compartilham o mesmo motor: uma CLI de terminal, extensões para IDE no VS Code, Cursor e JetBrains, um aplicativo desktop com revisão visual de diff e uma experiência web para tarefas de longa duração. Seus arquivos CLAUDE.md, configurações e servidores MCP acompanham todas elas."}, {"kind": "steps", "items": [{"label": "Arquivo de instruções", "body": "O Claude Code lê um arquivo CLAUDE.md na raiz do seu projeto no início de cada sessão — o lugar natural para codificar suas convenções de design, tokens e checklists de revisão."}, {"label": "Skills", "body": "As Agent Skills empacotam instruções, scripts e recursos reutilizáveis que o Claude carrega sob demanda, incluindo a skill oficial de Frontend Design da Anthropic, voltada ao bom gosto."}, {"label": "Plano e subagentes", "body": "Ele pode planejar antes de agir e criar subagentes que trabalham em diferentes partes de uma tarefa em paralelo, o que mantém grandes refatorações de UI coerentes."}]}, {"kind": "ul", "items": ["Fornecedor: Anthropic", "Credencial: chave de API da Anthropic (BYOK, via Console) ou assinatura do Claude (Pro / Max)", "Superfícies: CLI de terminal, extensões para VS Code / Cursor / JetBrains, aplicativo desktop, web"]}]}, {"id": "why-design", "heading": "Por que o Claude Code é bom em design", "blocks": [{"kind": "p", "text": "Entre os agentes de programação, o Claude Code tem reputação de bom gosto em trabalho de frontend. Algumas coisas explicam isso."}, {"kind": "steps", "items": [{"label": "Decisões específicas, não vagas", "body": "O Claude Code tende a se comprometer com escolhas concretas — valores hex exatos, escalas de espaçamento, rampas tipográficas e hierarquia de componentes — em vez de generalizar, e é isso que separa uma interface de verdade de um placeholder."}, {"label": "Raciocínio ciente da base de código", "body": "Com um amplo contexto de trabalho, ele refatora a UI em muitos arquivos de uma vez, reutilizando seus componentes e tokens existentes em vez de reinventar estilos avulsos."}, {"label": "Uma skill oficial de frontend", "body": "A Anthropic disponibiliza uma skill de Frontend Design que faz o Claude escrever primeiro uma direção de design e o afasta deliberadamente de fontes de sistema genéricas e dos previsíveis gradientes roxos."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Diagrama mostrando design system, skill e imagem de referência convergindo para um bom resultado de design", "caption": "O bom gosto vem de três insumos que você fornece: um design system, uma skill e imagens de referência reais."}, {"kind": "p", "text": "A lição é a mesma que a Anthropic faz sobre seus próprios modelos: o Claude não tem bom gosto por padrão — deixado por conta própria, ele converge para o centro estatístico do web design (Inter, gradientes roxos, sombras suaves). Ele produz bom design quando você lhe dá restrições. O Open Design empacota exatamente esses insumos, e é por isso que os dois se encaixam (mais sobre isso abaixo)."}]}, {"id": "setup", "heading": "Configure o Claude Code para trabalho de design, do zero", "blocks": [{"kind": "p", "text": "Aqui está o caminho completo, de uma máquina limpa até um Claude Code capaz de criar e verificar UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Fluxo de configuração em cinco passos: instalar, autenticar, configurar o CLAUDE.md, adicionar a skill, verificar", "caption": "A sequência de configuração: instalar → autenticar → configurar o CLAUDE.md → adicionar a skill de Frontend Design → habilitar a verificação no navegador."}, {"kind": "steps", "items": [{"label": "Codifique suas regras de design", "body": "Coloque seus tokens, primitivos e convenções no CLAUDE.md e aponte o Claude para eles, para que a saída combine com uma marca em vez de cair em uma aparência genérica."}, {"label": "Adicione verificação no navegador", "body": "Conecte um MCP do Playwright ou do Chrome para que o Claude renderize em um navegador real e verifique sua saída em diferentes breakpoints, em vez de apenas confirmar que o build passou."}]}]}, {"id": "skills-workflow", "heading": "O fluxo de CLAUDE.md e Skills", "blocks": [{"kind": "p", "text": "O loop de design de maior alavancagem com o Claude Code é alimentá-lo com referências reais mais o seu contexto de design e então iterar até que a UI corresponda — com o CLAUDE.md e as Skills carregando as restrições, para que você não precise reexplicá-las a cada prompt."}, {"kind": "ol", "items": ["Comece pelas referências visuais mais claras que você tiver — e inclua múltiplos estados (desktop e mobile, hover, vazio, carregando), não apenas uma única imagem de destaque.", "Seja específico no prompt; prompts vagos produzem UI genérica mesmo com um agente forte.", "Mantenha seu design system e suas convenções no CLAUDE.md e diga ao Claude onde ficam os tokens e os primitivos canônicos.", "Adicione a skill de Frontend Design para que o Claude se comprometa com uma direção estética real antes de escrever o código.", "Conecte a verificação no navegador para que o Claude renderize, redimensione para os breakpoints e compare de volta com as referências — em vez de apenas confirmar que o build funciona."]}, {"kind": "p", "text": "Solte uma imagem de referência na sessão e escreva o prompt com restrições concretas:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Mantenha um servidor de desenvolvimento rodando ao lado, mantenha os prompts pequenos e focados, e faça commit das boas iterações / reverta as ruins (avisando o Claude quando reverter), para que cada passada parta de uma base limpa. Use o modo de plano para refatorações maiores, de modo a poder revisar a abordagem antes de qualquer alteração nos arquivos."}]}, {"id": "figma", "heading": "Claude Code + Figma: ida e volta entre design ↔ código", "blocks": [{"kind": "p", "text": "Em fevereiro de 2026, a Anthropic e a Figma lançaram uma integração bidirecional de primeira classe via servidor MCP do Figma. Ela funciona nas duas direções."}, {"kind": "steps", "items": [{"label": "Design → Código", "body": "Selecione um frame no Figma ou cole um link no Claude Code, traga o contexto de design e peça que ele implemente o design usando sua biblioteca de componentes existente. O Code Connect mantém a saída alinhada com seus componentes reais."}, {"label": "Código → Design", "body": "Crie e visualize um recurso no navegador e então diga “Send this to Figma” para capturar a UI em execução como camadas editáveis do Figma — a tela inteira ou um elemento selecionado."}]}, {"kind": "p", "text": "Instale uma vez com claude plugin install figma@claude-plugins-official (o MCP do Dev Mode exige um plano pago do Figma). O mesmo MCP do Figma está disponível para Claude Code, Codex, Cursor e VS Code — exatamente o tipo de capacidade portátil e multiagente que o Open Design foi feito para orquestrar."}]}, {"id": "vs", "heading": "Claude Code vs Codex vs Cursor para design", "blocks": [{"kind": "p", "text": "Não há um único vencedor para o trabalho de design — cada agente tem uma força diferente, e times experientes os combinam. Um resumo justo:"}, {"kind": "table", "columns": ["Agente", "Força em design", "Melhor para"], "rows": [["Claude Code", "Decisões de design específicas (hex, espaçamento, tipografia) e raciocínio de UX ciente da base de código", "Raciocínio de frontend e refatorações com contexto amplo"], ["Codex", "Forte refinamento visual e compreensão de imagens; builds assíncronos em sandbox", "Builds assíncronos delegados e regras portáteis em AGENTS.md"], ["Cursor", "Loop visual de criar e ver com preview ao vivo e edições inline", "Trabalho de UI em iteração rápida e observação dentro de uma IDE"]]}, {"kind": "p", "text": "O veredito recorrente da comunidade é que o bom gosto vem dos humanos: todos os três caem em uma estética genérica sem skills, referências e restrições. Esse é o problema real a resolver — e ele tem forma de ferramenta de design, não de modelo."}]}, {"id": "pitfalls", "heading": "Armadilhas e como evitar a aparência de “lixo de IA”", "blocks": [{"kind": "p", "text": "Mesmo com a reputação de bom gosto do Claude Code, a reclamação mais comum sobre design gerado por IA é que ele parece genérico — fontes Inter, gradientes roxos sobre branco, sombras suaves, cantos arredondados exagerados, uma estética que “grita que uma IA fez isso”. A própria Anthropic atribui isso à convergência distribucional: escolhas seguras dominam os dados de treinamento da web. Outros problemas relatados incluem layouts mobile quebrados e instruções vazando para o texto da UI."}, {"kind": "steps", "items": [{"label": "Instale a skill de Frontend Design", "body": "Ela força o Claude a se comprometer com uma direção real e evita explicitamente fontes e gradientes usados em excesso por IA."}, {"label": "Habilite a verificação no navegador", "body": "Faça o Claude renderizar e verificar a si mesmo nos diferentes breakpoints para que os layouts não quebrem silenciosamente no mobile."}, {"label": "Forneça tokens e referências", "body": "Tokens de design reais e capturas de tela de referência são a maior alavanca isolada sobre a qualidade da saída."}, {"label": "Codifique regras no CLAUDE.md", "body": "Coloque regras de estilo como “sem hero cards, no máximo dois tipos de fonte, hierarquia que prioriza a marca” onde o agente as lê a cada execução."}]}, {"kind": "p", "text": "Note que toda mitigação tem a ver com dar ao agente um contexto de design curado. Manter esse contexto na mão, projeto a projeto, é o trabalho braçal que o Open Design elimina."}]}, {"id": "open-design", "heading": "Projetando com o Claude Code dentro do Open Design", "blocks": [{"kind": "p", "text": "O Open Design é a camada de design open-source que o fluxo acima fica pedindo. Ele trata o Claude Code como um adaptador de primeira parte e o envolve em uma biblioteca curada de skills e design systems, um pipeline de renderização estruturado e uma UI desktop local — para que o contexto de design que torna o Claude Code bom esteja presente desde a primeira execução, e não montado à mão a cada vez."}, {"kind": "ol", "items": ["Instale o Open Design e selecione o Claude Code como seu agente.", "Autentique-se com sua chave de API da Anthropic (BYOK) ou sua assinatura do Claude — as credenciais permanecem na sua máquina e nunca passam por um proxy nosso.", "Escolha um design system e uma skill, e então gere decks, protótipos e landing pages com bom gosto consistente.", "Cada artefato e arquivo DESIGN.md vive no seu próprio repositório, não em uma nuvem hospedada."]}, {"kind": "p", "text": "O mesmo agente Claude Code, a mesma chave — mais um fluxo de design real, portátil e open-source ao redor. É local-first e Apache-2.0, então nada do seu trabalho ou das suas credenciais sai da sua máquina."}]}], "faqTitle": "Perguntas frequentes", "faq": [{"name": "O Claude Code é bom para trabalho de design?", "text": "Sim — ele é amplamente considerado o agente de programação com o melhor bom gosto em frontend, tomando decisões específicas e cientes da base de código sobre valores hex, espaçamento e escalas tipográficas. Com a skill de Frontend Design, um design system e imagens de referência reais no contexto, ele produz UI responsiva e de qualidade de produção e pode verificá-la em um navegador. Sem esse contexto, ele tende a cair em uma aparência genérica, e é essa a lacuna que o Open Design preenche."}, {"name": "Preciso de uma assinatura do Claude para projetar com o Claude Code?", "text": "Você pode usar uma chave de API da Anthropic (BYOK, via Console) ou uma assinatura do Claude (Pro / Max). De qualquer forma, o Open Design nunca usa um proxy para suas credenciais — elas são usadas diretamente pelo seu agente na sua máquina."}, {"name": "Claude Code ou Codex para design de frontend?", "text": "Ambos são fortes. O Claude Code é conhecido por decisões de design específicas e cientes da base de código e por raciocínio de frontend; o Codex tem forte refinamento visual e se destaca em builds delegados e em sandbox. Muitos times usam os dois — o Open Design permite trocar de agente sem mudar o seu fluxo de design."}, {"name": "Como conecto o Claude Code ao Figma?", "text": "Instale o plugin oficial do Figma com claude plugin install figma@claude-plugins-official. Você pode então implementar frames do Figma em código usando o contexto de design e enviar uma UI em execução de volta para frames editáveis do Figma com “Send this to Figma”. O MCP do Dev Mode exige um plano pago do Figma."}, {"name": "O que são Skills e CLAUDE.md?", "text": "O CLAUDE.md é um arquivo markdown na raiz do seu projeto que o Claude Code lê no início de cada sessão — o lugar para codificar suas convenções de design. As Skills empacotam instruções e recursos reutilizáveis que o Claude carrega sob demanda, incluindo a skill oficial de Frontend Design da Anthropic. O Open Design oferece uma biblioteca curada de ambos para que você pule a configuração projeto a projeto."}, {"name": "Como evito a estética genérica de “lixo de IA”?", "text": "Instale a skill de Frontend Design, forneça tokens de design reais e capturas de tela de referência, codifique as regras da marca no CLAUDE.md e habilite a verificação no navegador. O Open Design entrega tudo isso como uma biblioteca curada para que você pule a configuração projeto a projeto."}, {"name": "O Open Design é afiliado à Anthropic?", "text": "Não. O Claude Code é um produto da Anthropic; o Open Design é um projeto open-source independente que o suporta como um adaptador de primeira parte. Claude e Claude Code são marcas registradas da Anthropic."}, {"name": "Meus arquivos e credenciais estão seguros?", "text": "Sim — o Open Design é local-first e Apache-2.0. Seus arquivos, artefatos e DESIGN.md permanecem no seu próprio repositório, e suas credenciais da Anthropic são usadas diretamente pelo seu agente, nunca roteadas por servidores do Open Design."}], "ctaTitle": "Projete com o Claude Code, do jeito aberto.", "ctaBody": "Traga sua própria chave da Anthropic ou assinatura do Claude, mantenha cada arquivo local e tenha uma biblioteca de design curada ao redor do agente que você já usa.", "ctaActions": [{"label": "Use o Claude Code dentro do Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dê uma estrela no GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Baixe o aplicativo desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Veja todos os agentes suportados"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex para design — Open Design", + description: "Como as pessoas usam o OpenAI Codex para design de UI e web — o plugin Product Design, a integração com o Figma, skills de frontend — e como o Open Design transforma o Codex em um agente de design local-first e open-source.", + breadcrumb: "Codex", + label: "Agente · Codex", + heading: "Codex para design.", + lead: "O Codex é o agente de programação da OpenAI. Com seu plugin Product Design e sua integração com o Figma, ele se tornou uma ferramenta de design séria. O Open Design conecta o Codex a um fluxo de design open-source — sua chave da OpenAI ou assinatura do ChatGPT, seus arquivos, local-first.", + rich: {"heroCtaLead": "O Open Design transforma o Codex em um agente de design local-first e open-source — sua chave da OpenAI, seus arquivos, com uma biblioteca curada de skills e design systems ao redor.", "heroCtaActions": [{"label": "Use o Codex dentro do Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dê uma estrela no GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Baixe o aplicativo desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["O OpenAI Codex começou como um gerador de código, mas em 2026 se tornou uma ferramenta confiável para projetar interfaces de verdade — desde que você lhe dê as referências, skills e o loop de verificação certos. Este é um guia prático e completo para usar o Codex em trabalho de UI, frontend e design system, e para conectá-lo a um fluxo de design estruturado com o Open Design.", "Ele cobre o que o Codex é hoje, por que ele de repente ficou bom em frontend, como configurá-lo do zero, o loop de screenshot para UI, a integração oficial de ida e volta com o Figma, como ele se compara ao Cursor e ao Claude Code, as armadilhas que fazem a saída de IA parecer genérica e como o Open Design fecha essa lacuna como uma camada de design aberta e local-first."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Loop de feedback de design do Codex: o agente no terminal, o navegador renderizando a UI e um espaço de trabalho, com uma seta de feedback voltando ao início", "caption": "O loop central: o Codex cria a UI no terminal, renderiza e a verifica em um navegador real e itera em direção às suas referências."}, "tocLabel": "Nesta página", "toc": [{"id": "what-is-codex", "label": "O que o OpenAI Codex realmente é"}, {"id": "why-design", "label": "Por que o Codex é bom em design agora"}, {"id": "setup", "label": "Configure o Codex para design (do zero)"}, {"id": "screenshot-workflow", "label": "O fluxo de screenshot para UI"}, {"id": "figma", "label": "Integração de ida e volta Codex + Figma"}, {"id": "vs", "label": "Codex vs Cursor vs Claude Code"}, {"id": "pitfalls", "label": "Armadilhas e a aparência de “lixo de IA”"}, {"id": "open-design", "label": "Projetando com o Codex no Open Design"}, {"id": "faq", "label": "Perguntas frequentes"}], "sections": [{"id": "what-is-codex", "heading": "O que o OpenAI Codex realmente é (e o que não é)", "blocks": [{"kind": "p", "text": "Primeiro, uma desambiguação que confunde quase todo mundo que busca por “Codex”. O OpenAI Codex original era um modelo de autocompletar código de 2021 que alimentava as primeiras versões do GitHub Copilot e foi descontinuado em 2023. Não é disso que esta página trata. O Codex de hoje é a ferramenta de programação agêntica da OpenAI — ele planeja, escreve, executa e verifica código a partir de tarefas em linguagem natural."}, {"kind": "p", "text": "O Codex moderno está disponível em quatro superfícies: uma CLI de terminal (reescrita em Rust, licenciada sob Apache-2.0), uma extensão para IDE no VS Code, Cursor e Windsurf, uma experiência em nuvem/web para tarefas assíncronas delegadas e um aplicativo desktop com um navegador embutido e Computer Use."}, {"kind": "steps", "items": [{"label": "Modelo padrão", "body": "Em meados de 2026, o modelo recomendado é o gpt-5.5, sendo o gpt-5.4 o modelo que a OpenAI treinou explicitamente para frontend e computer use."}, {"label": "Arquivo de instruções", "body": "O Codex lê um arquivo AGENTS.md no seu projeto (um padrão entre ferramentas) para as regras do projeto — o lugar natural para codificar suas convenções de design."}, {"label": "Sandbox", "body": "Ele roda em um sandbox a nível de kernel (workspace-write por padrão), então um agente editando sua UI não consegue sair dos limites do projeto."}]}, {"kind": "ul", "items": ["Fornecedor: OpenAI", "Credencial: chave de API da OpenAI (BYOK) ou assinatura do ChatGPT (Free / Go / Plus / Pro / Business / Enterprise)", "Licença da CLI: Apache-2.0, open source"]}]}, {"id": "why-design", "heading": "Por que o Codex é bom em design agora", "blocks": [{"kind": "p", "text": "Três coisas convergiram no início de 2026 para tornar o Codex uma ferramenta de design de verdade, em vez de um gerador de código genérico."}, {"kind": "steps", "items": [{"label": "Um modelo treinado para frontend", "body": "A OpenAI lançou o GPT-5.4, seu primeiro modelo de linha principal treinado para frontend e computer use, com compreensão de imagens muito melhor ao longo do fluxo de design e autoverificação mais forte. Ele consegue até gerar mood boards e opções visuais antes de se comprometer com os assets finais."}, {"label": "Uma skill oficial de frontend", "body": "O catálogo openai/skills traz uma frontend-skill curada que impõe bom gosto de verdade: layouts sem cards, heros full-bleed, hierarquia que prioriza a marca, movimento contido, no máximo dois tipos de fonte e uma cor de destaque — e faz o Codex escrever uma tese visual antes de construir."}, {"label": "Verificação no navegador", "body": "Com a skill do Playwright, o Codex abre um navegador real, redimensiona para os breakpoints e compara sua saída de volta com a referência, em vez de apenas verificar que o build passou."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Diagrama mostrando design system, skill e imagem de referência convergindo para um bom resultado de design", "caption": "O bom gosto vem de três insumos que você fornece: um design system, uma skill e imagens de referência reais."}, {"kind": "p", "text": "A lição por trás das três: o Codex não tem bom gosto por padrão. Ele produz bom design quando você lhe dá restrições — um design system, uma skill estética e referências concretas. O Open Design empacota exatamente esses insumos, e é por isso que os dois se encaixam (mais sobre isso abaixo)."}]}, {"id": "setup", "heading": "Configure o Codex para trabalho de design, do zero", "blocks": [{"kind": "p", "text": "Aqui está o caminho completo, de uma máquina limpa até um Codex capaz de criar e verificar UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Fluxo de configuração em cinco passos: instalar, autenticar, configurar, instalar a skill, verificar", "caption": "A sequência de configuração: instalar → autenticar → configurar o AGENTS.md → instalar a skill de frontend → habilitar a verificação no navegador."}, {"kind": "steps", "items": [{"label": "Codifique suas regras de design", "body": "Coloque seus tokens, primitivos e convenções no AGENTS.md ou em um DESIGN.md e aponte o Codex para eles, para que a saída combine com uma marca em vez de cair em uma aparência genérica."}, {"label": "Escolha o nível de raciocínio certo", "body": "A OpenAI observa que níveis de raciocínio de baixo a médio costumam produzir resultados de frontend mais fortes do que o nível mais alto."}]}]}, {"id": "screenshot-workflow", "heading": "O fluxo de screenshot para UI", "blocks": [{"kind": "p", "text": "O loop de design de maior alavancagem com o Codex é transformar uma imagem de referência em uma UI funcional e responsiva e iterar até que ela corresponda. A própria orientação da OpenAI se resume a cinco passos."}, {"kind": "ol", "items": ["Comece pelas referências visuais mais claras que você tiver — e inclua múltiplos estados (desktop e mobile, hover, vazio, carregando), não apenas uma única imagem de destaque.", "Seja específico no prompt; prompts vagos produzem UI genérica.", "Prepare um design system e diga ao Codex onde ficam os tokens e os primitivos canônicos.", "Habilite a skill interativa do Playwright para que o Codex renderize em um navegador real e redimensione para os breakpoints.", "Itere fazendo o Codex comparar sua implementação de volta com as capturas de tela — em vez de apenas confirmar que o build funciona."]}, {"kind": "p", "text": "Alimente as imagens arrastando uma captura de tela para o terminal ou usando a flag de imagem, e então escreva o prompt com restrições concretas:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Rode um servidor de desenvolvimento em um segundo terminal, mantenha os prompts pequenos e focados, e faça commit das boas iterações / reverta as ruins (avisando o Codex quando reverter), para que cada passada parta de uma base limpa."}]}, {"id": "figma", "heading": "Codex + Figma: ida e volta entre design ↔ código", "blocks": [{"kind": "p", "text": "Em fevereiro de 2026, a OpenAI e a Figma anunciaram uma parceria oficial, transformando o beta anterior do MCP do Figma em uma integração bidirecional de primeira classe. Ela funciona nas duas direções."}, {"kind": "steps", "items": [{"label": "Design → Código", "body": "Copie o “link to selection” de um frame no Figma, cole-o no Codex com get_design_context e peça que ele implemente o design usando sua biblioteca de componentes existente."}, {"label": "Código → Design", "body": "A ferramenta generate_figma_design (“Code to Canvas”) transforma uma UI viva e em execução de volta em frames editáveis do Figma — a tela inteira, um elemento selecionado ou um arquivo completo."}]}, {"kind": "p", "text": "O MCP do Figma roda como um servidor remoto e está isento de limites de taxa. Adicione-o uma vez e ele fica disponível para Codex, Claude Code, Cursor, VS Code e mais — exatamente o tipo de capacidade portátil e multiagente que o Open Design foi feito para orquestrar."}]}, {"id": "vs", "heading": "Codex vs Cursor vs Claude Code para design", "blocks": [{"kind": "p", "text": "Não há um único vencedor para o trabalho de design — cada agente tem uma força diferente, e times experientes os combinam. Um resumo justo:"}, {"kind": "table", "columns": ["Agente", "Força em design", "Melhor para"], "rows": [["Codex", "Forte refinamento visual após o GPT-5.4 + frontend-skill; compreensão de imagens", "Builds assíncronos delegados, execuções em sandbox, regras portáteis em AGENTS.md"], ["Cursor", "Loop visual de criar e ver com preview ao vivo e edições inline", "Trabalho de UI em iteração rápida e observação dentro de uma IDE"], ["Claude Code", "Decisões de design específicas (hex, espaçamento, tipografia) e UX ciente da base de código", "Raciocínio de frontend e refatorações com contexto amplo"]]}, {"kind": "p", "text": "O veredito recorrente da comunidade é que o bom gosto vem dos humanos: todos os três caem em uma estética genérica sem skills, referências e restrições. Esse é o problema real a resolver — e ele tem forma de ferramenta de design, não de modelo."}]}, {"id": "pitfalls", "heading": "Armadilhas e como evitar a aparência de “lixo de IA”", "blocks": [{"kind": "p", "text": "A reclamação mais comum sobre o design gerado pelo Codex é que ele parece genérico — gradientes suaves, painéis flutuantes, cantos arredondados exagerados, sombras dramáticas, uma vibe de Inter-e-roxo que “grita que uma IA fez isso”. Outros problemas relatados incluem layouts mobile quebrados, instruções vazando para o texto da UI e atingir os limites de uso rapidamente."}, {"kind": "steps", "items": [{"label": "Instale uma skill de frontend", "body": "Uma skill estética curada força o Codex a se comprometer com uma direção real em vez da aparência padrão."}, {"label": "Habilite a verificação com Playwright", "body": "Faça o Codex renderizar e verificar a si mesmo nos diferentes breakpoints para que os layouts não quebrem silenciosamente no mobile."}, {"label": "Forneça tokens e referências", "body": "Tokens de design reais e capturas de tela de referência são a maior alavanca isolada sobre a qualidade da saída."}, {"label": "Codifique regras no AGENTS.md", "body": "Coloque regras de estilo como “sem hero cards, no máximo dois tipos de fonte, hierarquia que prioriza a marca” onde o agente as lê a cada execução."}]}, {"kind": "p", "text": "Note que toda mitigação tem a ver com dar ao agente um contexto de design curado. Manter esse contexto na mão, projeto a projeto, é o trabalho braçal que o Open Design elimina."}]}, {"id": "open-design", "heading": "Projetando com o Codex dentro do Open Design", "blocks": [{"kind": "p", "text": "O Open Design é a camada de design open-source que o fluxo acima fica pedindo. Ele trata o Codex como um adaptador de primeira parte e o envolve em uma biblioteca curada de skills e design systems, um pipeline de renderização estruturado e uma UI desktop local — para que o contexto de design que torna o Codex bom esteja presente desde a primeira execução, e não montado à mão a cada vez."}, {"kind": "ol", "items": ["Instale o Open Design e selecione o Codex como seu agente.", "Autentique-se com sua chave de API da OpenAI (BYOK) ou sua assinatura do ChatGPT — as credenciais permanecem na sua máquina e nunca passam por um proxy nosso.", "Escolha um design system e uma skill, e então gere decks, protótipos e landing pages com bom gosto consistente.", "Cada artefato e arquivo DESIGN.md vive no seu próprio repositório, não em uma nuvem hospedada."]}, {"kind": "p", "text": "O mesmo agente Codex, a mesma chave — mais um fluxo de design real, portátil e open-source ao redor. É local-first e Apache-2.0, então nada do seu trabalho ou das suas credenciais sai da sua máquina."}]}], "faqTitle": "Perguntas frequentes", "faq": [{"name": "O OpenAI Codex realmente consegue fazer trabalho de design?", "text": "Sim — com uma skill de frontend, um design system e imagens de referência reais no contexto, o Codex (especialmente no GPT-5.4) produz UI responsiva e de qualidade de produção e pode verificá-la em um navegador. Sem esse contexto, ele tende a cair em uma aparência genérica, e é essa a lacuna que o Open Design preenche."}, {"name": "Isto é o plugin Product Design do OpenAI Codex?", "text": "Não. O Open Design é um projeto open-source independente que integra o Codex como um agente. Ele complementa as próprias ferramentas da OpenAI com uma biblioteca aberta e local-first de skills e design systems."}, {"name": "Preciso de uma assinatura do ChatGPT para projetar com o Codex?", "text": "Você pode usar uma chave de API da OpenAI (BYOK) ou sua assinatura do ChatGPT. O login com o ChatGPT geralmente oferece limites mais generosos; de qualquer forma, o Open Design nunca usa um proxy para suas credenciais."}, {"name": "Codex ou Claude Code para design de frontend?", "text": "Ambos são fortes. O Claude Code é conhecido por decisões de design específicas e cientes da base de código; o Codex tem forte refinamento visual após o GPT-5.4 e se destaca em builds delegados e em sandbox. Muitos times usam os dois — o Open Design permite trocar de agente sem mudar o seu fluxo de design."}, {"name": "Como conecto o Codex ao Figma?", "text": "Adicione o servidor MCP oficial do Figma (codex mcp add figma --url https://mcp.figma.com/mcp). Você pode então implementar frames do Figma em código com get_design_context e enviar uma UI em execução de volta para frames editáveis do Figma com generate_figma_design."}, {"name": "Como evito a estética genérica de “lixo de IA”?", "text": "Instale uma skill de frontend, forneça tokens de design reais e capturas de tela de referência, codifique as regras da marca no AGENTS.md e habilite a verificação com Playwright. O Open Design entrega tudo isso como uma biblioteca curada para que você pule a configuração projeto a projeto."}, {"name": "O Open Design é afiliado à OpenAI?", "text": "Não. O Codex é um produto da OpenAI; o Open Design é um projeto open-source independente que o suporta como um adaptador de primeira parte. OpenAI e Codex são marcas registradas da OpenAI."}, {"name": "Meus arquivos e credenciais estão seguros?", "text": "Sim — o Open Design é local-first. Seus arquivos, artefatos e DESIGN.md permanecem no seu próprio repositório, e suas credenciais da OpenAI são usadas diretamente pelo seu agente, nunca roteadas por servidores do Open Design."}], "ctaTitle": "Projete com o Codex, do jeito aberto.", "ctaBody": "Traga sua própria chave da OpenAI, mantenha cada arquivo local e tenha uma biblioteca de design curada ao redor do agente que você já usa.", "ctaActions": [{"label": "Use o Codex dentro do Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dê uma estrela no GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Baixe o aplicativo desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Veja todos os agentes suportados"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor para designers — Open Design", + description: "Como designers usam o Cursor para design de UI e web — Design Mode, Figma-para-código, o MCP do Figma — e como o Open Design transforma o Cursor em um agente de design local-first e open-source.", + breadcrumb: "Cursor", + label: "Agente · Cursor", + heading: "Cursor para designers.", + lead: "O Cursor é o editor de código com IA, agora com um Design Mode visual. Designers o usam para editar a UI apontando e desenhando, e para transformar o Figma em código. O Open Design conecta o Cursor Agent a um fluxo de design open-source que mantém seus arquivos locais.", + rich: {"heroCtaLead": "O Open Design transforma o Cursor em um agente de design local-first e open-source — sua conta do Cursor ou chaves de modelo, seus arquivos, com uma biblioteca curada de skills e design systems ao redor.", "heroCtaActions": [{"label": "Use o Cursor dentro do Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dê uma estrela no GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Baixe o aplicativo desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["O Cursor é o editor de código IA-first que tornou “criar e ver renderizar” a forma padrão de entregar UI. Com o modo Agent, edições inline, um preview dentro do editor e o Figma via MCP, ele se tornou uma ferramenta de design genuína — desde que você lhe dê as referências, regras e um loop de verificação certos. Este é um guia prático e completo para usar o Cursor em trabalho de UI, frontend e design system, e para conectá-lo a um fluxo de design estruturado com o Open Design.", "Ele cobre o que o Cursor realmente é, por que seu loop apertado de iterar e observar é bom para design, como configurá-lo do zero, o loop de screenshot e preview até a UI, a integração de ida e volta com o Figma via MCP, como ele se compara ao Codex e ao Claude Code, as armadilhas que fazem a saída de IA parecer genérica e como o Open Design fecha essa lacuna como uma camada de design aberta e local-first."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Convergência de design do Cursor: o editor à esquerda, um hub curado de skills e design systems no meio com a marca do Cursor ao centro, e uma UI renderizada à direita", "caption": "A ideia central: o Cursor edita e renderiza a UI no editor, enquanto um hub de design curado o alimenta com o system, as skills e as referências que fazem a saída parecer intencional."}, "tocLabel": "Nesta página", "toc": [{"id": "what-is-cursor", "label": "O que o Cursor realmente é"}, {"id": "why-design", "label": "Por que o Cursor é bom em design"}, {"id": "setup", "label": "Configure o Cursor para design (do zero)"}, {"id": "preview-workflow", "label": "O fluxo de preview para UI"}, {"id": "figma", "label": "Cursor + Figma via MCP"}, {"id": "vs", "label": "Cursor vs Codex vs Claude Code"}, {"id": "pitfalls", "label": "Armadilhas e a aparência de “lixo de IA”"}, {"id": "open-design", "label": "Projetando com o Cursor no Open Design"}, {"id": "faq", "label": "Perguntas frequentes"}], "sections": [{"id": "what-is-cursor", "heading": "O que o Cursor realmente é", "blocks": [{"kind": "p", "text": "O Cursor é um editor de código IA-first criado pela Anysphere. É um fork do VS Code, então mantém o editor, as extensões e os atalhos de teclado familiares, mas reconstrói o fluxo de trabalho em torno de um agente de IA que pode ler seu projeto inteiro, editar múltiplos arquivos, executar comandos e iterar com você no loop."}, {"kind": "p", "text": "Para trabalho de design, as superfícies importantes são o modo Agent (você descreve um resultado e o Cursor planeja e edita entre arquivos), edições inline e completions com Tab para ajustes rápidos, um preview / navegador dentro do editor para que você veja a UI em execução sem sair da janela, e o suporte a MCP que permite trazer contexto externo como um arquivo Figma ao vivo."}, {"kind": "steps", "items": [{"label": "Regras de projeto", "body": "O Cursor lê arquivos de instruções do projeto — regras `.mdc` versionadas em `.cursor/rules` e um `AGENTS.md` simples — para que você codifique suas convenções de design onde o agente as lê a cada execução."}, {"label": "Modelos", "body": "O Cursor é flexível quanto a modelos: ele vem com modelos de fronteira pela sua assinatura e também suporta trazer suas próprias chaves de modelo, então você escolhe o motor por trás do mesmo fluxo de trabalho do editor."}, {"label": "MCP", "body": "Ele fala o Model Context Protocol, então servidores externos — o mais relevante sendo o servidor MCP do Figma — se tornam contexto de primeira classe para o agente."}]}, {"kind": "ul", "items": ["Fornecedor: Anysphere", "Credencial: conta / assinatura do Cursor (Hobby / Pro / Business) ou suas próprias chaves de modelo (BYOK)", "Forma: editor de código IA-first (fork do VS Code) com um agente e preview dentro do editor"]}]}, {"id": "why-design", "heading": "Por que o Cursor é bom em design", "blocks": [{"kind": "p", "text": "A vantagem do Cursor em design não é um único recurso — é a precisão do loop de criar e ver. Três coisas o fazem parecer uma ferramenta de design em vez de um gerador de código genérico."}, {"kind": "steps", "items": [{"label": "Um loop apertado de iterar e observar", "body": "Você escreve o prompt, o Cursor edita entre arquivos e o preview dentro do editor renderiza o resultado imediatamente — então você ajusta espaçamento, hierarquia e movimento em segundos, em vez de ir e voltar entre um terminal e um navegador separados."}, {"label": "Edição visual direta", "body": "Além do chat, o Cursor permite selecionar elementos no preview e ajustar estilos, de modo que pequenas correções visuais parecem edições de design em vez de arqueologia de código."}, {"label": "Regras de projeto e contexto de MCP", "body": "Com `.cursor/rules` (ou `AGENTS.md`) e o servidor MCP do Figma, o agente trabalha a partir dos seus tokens, componentes e specs de design reais, em vez de adivinhar."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Diagrama mostrando design system, skill e imagem de referência convergindo para um bom resultado de design", "caption": "O bom gosto vem de três insumos que você fornece: um design system, uma skill e imagens de referência reais."}, {"kind": "p", "text": "A lição é a mesma que todo agente ensina: o Cursor não tem bom gosto por padrão. Ele produz bom design quando você lhe dá restrições — um design system, uma skill estética e referências concretas. O Open Design empacota exatamente esses insumos, e é por isso que os dois se encaixam (mais sobre isso abaixo)."}]}, {"id": "setup", "heading": "Configure o Cursor para trabalho de design, do zero", "blocks": [{"kind": "p", "text": "Aqui está o caminho completo, de uma máquina limpa até um Cursor capaz de criar, visualizar e verificar UI em relação ao seu design system."}, {"kind": "ol", "items": ["Instale o Cursor a partir de cursor.com e faça login com sua conta do Cursor, ou configure suas próprias chaves de modelo (BYOK) em Settings.", "Abra seu projeto e escolha um modelo no painel de chat / Agent.", "Adicione regras de projeto: crie `.cursor/rules/*.mdc` para convenções estruturadas e com escopo por glob, ou um `AGENTS.md` simples para instruções legíveis e diretas.", "Conecte o servidor MCP do Figma (opcional) para que o agente possa ler o contexto de design ao vivo.", "Rode seu servidor de desenvolvimento e use o preview dentro do editor para ver e verificar a UI enquanto você itera."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Fluxo de configuração em cinco passos: instalar, autenticar, configurar regras, adicionar skill, verificar", "caption": "A sequência de configuração: instalar → autenticar → configurar as regras de projeto → adicionar uma skill → habilitar a verificação no preview."}, {"kind": "p", "text": "Um arquivo mínimo de regras de projeto faz o agente projetar para uma marca em vez de cair em uma aparência genérica. Coloque-o onde o Cursor o lê a cada execução:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Codifique suas regras de design", "body": "Coloque seus tokens, primitivos e convenções em `.cursor/rules` ou `AGENTS.md` e aponte o Cursor para eles, para que a saída combine com uma marca em vez de cair em uma aparência genérica."}, {"label": "Mantenha os prompts pequenos", "body": "O loop apertado do Cursor recompensa pedidos focados — itere um componente ou estado de cada vez e observe o preview entre as passadas."}]}]}, {"id": "preview-workflow", "heading": "O fluxo de preview para UI", "blocks": [{"kind": "p", "text": "O loop de design de maior alavancagem com o Cursor é transformar uma referência em uma UI funcional e responsiva e iterar no editor até que ela corresponda — observando o preview ao vivo o tempo todo, em vez de adivinhar."}, {"kind": "ol", "items": ["Comece pelas referências visuais mais claras que você tiver — e inclua múltiplos estados (desktop e mobile, hover, vazio, carregando), não apenas uma única imagem de destaque.", "Seja específico no prompt; prompts vagos produzem UI genérica.", "Prepare um design system e diga ao Cursor onde ficam os tokens e os primitivos canônicos.", "Mantenha o preview dentro do editor aberto e seu servidor de desenvolvimento rodando para que cada edição renderize imediatamente nos breakpoints que importam para você.", "Itere comparando a UI renderizada de volta com as referências — e use a seleção direta de elementos no preview para pequenas correções visuais."]}, {"kind": "p", "text": "Alimente as referências anexando uma imagem ao chat e então escreva o prompt com restrições concretas:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Faça commit das boas iterações e reverta as ruins (avisando o Cursor quando reverter), para que cada passada parta de uma base limpa — a mesma disciplina que impede qualquer loop de agente de derivar."}]}, {"id": "figma", "heading": "Cursor + Figma: design ↔ código via MCP", "blocks": [{"kind": "p", "text": "O Cursor se conecta ao Figma por meio do servidor MCP oficial do Figma, que dá ao agente acesso estruturado a um arquivo Figma ao vivo em vez de uma captura de tela plana. Isso elimina a adivinhação do handoff."}, {"kind": "steps", "items": [{"label": "Design → Código", "body": "Copie o link de um frame no Figma, cole-o no Cursor e peça que ele implemente o design. O servidor MCP expõe o contexto de design real — componentes, variáveis, dados de layout, tokens — para que o código gerado corresponda à fonte em vez de aproximá-la."}, {"label": "Mantenha o alinhamento", "body": "Com tokens de design, estilos e componentes usados de forma consistente no Figma (e o Code Connect quando disponível), a saída do Cursor permanece mapeada ao seu design system real, em vez de reinventar primitivos."}]}, {"kind": "p", "text": "Configure o servidor MCP remoto do Figma uma vez e ele fica disponível para o Cursor como contexto de primeira classe. Como o MCP é um padrão aberto, o mesmo servidor é reutilizável entre Cursor, Claude Code, Codex e VS Code — exatamente o tipo de capacidade portátil e multiagente que o Open Design foi feito para orquestrar."}]}, {"id": "vs", "heading": "Cursor vs Codex vs Claude Code para design", "blocks": [{"kind": "p", "text": "Não há um único vencedor para o trabalho de design — cada agente tem uma força diferente, e times experientes os combinam. Um resumo justo:"}, {"kind": "table", "columns": ["Agente", "Força em design", "Melhor para"], "rows": [["Cursor", "Loop visual de criar e ver com preview ao vivo dentro do editor e edição direta de elementos", "Trabalho de UI em iteração rápida e observação dentro de uma IDE"], ["Codex", "Forte refinamento visual com uma skill de frontend; compreensão de imagens e execuções em sandbox", "Builds assíncronos delegados e regras portáteis em AGENTS.md"], ["Claude Code", "Decisões de design específicas (hex, espaçamento, tipografia) e UX ciente da base de código", "Raciocínio de frontend e refatorações com contexto amplo"]]}, {"kind": "p", "text": "O veredito recorrente da comunidade é que o bom gosto vem dos humanos: todos os três caem em uma estética genérica sem skills, referências e restrições. Esse é o problema real a resolver — e ele tem forma de ferramenta de design, não de modelo."}]}, {"id": "pitfalls", "heading": "Armadilhas e como evitar a aparência de “lixo de IA”", "blocks": [{"kind": "p", "text": "A reclamação mais comum sobre o design gerado pelo Cursor é que ele parece genérico — gradientes suaves, painéis flutuantes, cantos arredondados exagerados, sombras dramáticas, uma vibe de Inter-e-roxo que “grita que uma IA fez isso”. Outros problemas relatados incluem layouts que quebram no mobile e instruções vazando para o texto da UI."}, {"kind": "steps", "items": [{"label": "Adicione uma skill de design", "body": "Uma skill estética curada força o Cursor a se comprometer com uma direção real em vez da aparência padrão."}, {"label": "Use o preview para verificar", "body": "Renderize e verifique a si mesmo nos diferentes breakpoints no preview dentro do editor para que os layouts não quebrem silenciosamente no mobile."}, {"label": "Forneça tokens e referências", "body": "Tokens de design reais e capturas de tela de referência são a maior alavanca isolada sobre a qualidade da saída."}, {"label": "Codifique regras em `.cursor/rules`", "body": "Coloque regras de estilo como “sem hero cards, no máximo dois tipos de fonte, hierarquia que prioriza a marca” onde o agente as lê a cada execução."}]}, {"kind": "p", "text": "Note que toda mitigação tem a ver com dar ao agente um contexto de design curado. Manter esse contexto na mão, projeto a projeto, é o trabalho braçal que o Open Design elimina."}]}, {"id": "open-design", "heading": "Projetando com o Cursor dentro do Open Design", "blocks": [{"kind": "p", "text": "O Open Design é a camada de design open-source que o fluxo acima fica pedindo. Ele trata o Cursor como um adaptador de primeira parte e o envolve em uma biblioteca curada de skills e design systems, um pipeline de renderização estruturado e uma UI desktop local — para que o contexto de design que torna o Cursor bom esteja presente desde a primeira execução, e não montado à mão a cada vez."}, {"kind": "ol", "items": ["Instale o Open Design e selecione o Cursor como seu agente.", "Autentique-se com sua conta do Cursor ou suas próprias chaves de modelo (BYOK) — as credenciais permanecem na sua máquina e nunca passam por um proxy nosso.", "Escolha um design system e uma skill, e então gere decks, protótipos e landing pages com bom gosto consistente.", "Cada artefato e arquivo DESIGN.md vive no seu próprio repositório, não em uma nuvem hospedada."]}, {"kind": "p", "text": "O mesmo agente Cursor, a mesma chave — mais um fluxo de design real, portátil e open-source ao redor. É local-first e Apache-2.0, então nada do seu trabalho ou das suas credenciais sai da sua máquina."}]}], "faqTitle": "Perguntas frequentes", "faq": [{"name": "O Cursor realmente consegue fazer trabalho de design?", "text": "Sim — com uma skill de design, um design system e imagens de referência reais no contexto, o Cursor produz UI responsiva e de qualidade de produção, e seu preview dentro do editor permite verificá-la e refiná-la visualmente. Sem esse contexto, ele tende a cair em uma aparência genérica, e é essa a lacuna que o Open Design preenche."}, {"name": "Isto é um produto oficial do Cursor?", "text": "Não. O Open Design é um projeto open-source independente que integra o Cursor como um agente. Ele complementa o Cursor com uma biblioteca aberta e local-first de skills e design systems."}, {"name": "Preciso de uma assinatura do Cursor para projetar com o Cursor?", "text": "Você pode usar uma conta / assinatura do Cursor ou trazer suas próprias chaves de modelo (BYOK). De qualquer forma, o Open Design nunca usa um proxy para suas credenciais — elas são usadas diretamente pelo seu agente."}, {"name": "Cursor ou Claude Code para design de frontend?", "text": "Ambos são fortes. O Claude Code é conhecido por decisões de design específicas e cientes da base de código; a vantagem do Cursor é seu loop apertado de criar e ver com um preview ao vivo dentro do editor. Muitos times usam os dois — o Open Design permite trocar de agente sem mudar o seu fluxo de design."}, {"name": "Como conecto o Cursor ao Figma?", "text": "Adicione o servidor MCP oficial do Figma no Cursor, então cole um link de frame do Figma no chat e peça ao Cursor que o implemente. O servidor expõe componentes, variáveis e dados de layout reais para que o código gerado corresponda ao design de origem."}, {"name": "Como evito a estética genérica de “lixo de IA”?", "text": "Adicione uma skill de design, forneça tokens de design reais e capturas de tela de referência, codifique as regras da marca em `.cursor/rules` ou `AGENTS.md` e verifique nos diferentes breakpoints no preview. O Open Design entrega tudo isso como uma biblioteca curada para que você pule a configuração projeto a projeto."}, {"name": "O Open Design é afiliado ao Cursor ou à Anysphere?", "text": "Não. O Cursor é um produto da Anysphere; o Open Design é um projeto open-source independente que o suporta como um adaptador de primeira parte. Cursor e Anysphere são marcas registradas da Anysphere, Inc."}, {"name": "Meus arquivos e credenciais estão seguros?", "text": "Sim — o Open Design é local-first. Seus arquivos, artefatos e DESIGN.md permanecem no seu próprio repositório, e suas credenciais do Cursor ou de modelo são usadas diretamente pelo seu agente, nunca roteadas por servidores do Open Design."}], "ctaTitle": "Projete com o Cursor, do jeito aberto.", "ctaBody": "Traga sua própria conta do Cursor ou chaves de modelo, mantenha cada arquivo local e tenha uma biblioteca de design curada ao redor do agente que você já usa.", "ctaActions": [{"label": "Use o Cursor dentro do Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dê uma estrela no GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Baixe o aplicativo desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Veja todos os agentes suportados"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode para design — Open Design", + description: "Como as pessoas usam o OpenCode para design de UI e web — arquivos design.md, skills de UI/UX, MCP do Figma — e como o Open Design transforma o OpenCode em um agente de design local-first e open-source.", + breadcrumb: "OpenCode", + label: "Agente · OpenCode", + heading: "OpenCode para design.", + lead: "O OpenCode é o agente de programação com IA no terminal, open-source. Designers acoplam a ele skills de design e arquivos DESIGN.md para gerar UI de verdade. O Open Design transforma isso em um fluxo estruturado e open-source — traga suas chaves de provedor e mantenha tudo local.", + rich: {"heroCtaLead": "O Open Design transforma o OpenCode em um agente de design local-first e open-source — qualquer modelo que você escolher com sua própria chave de provedor, seus arquivos, com uma biblioteca curada de skills e design systems ao redor.", "heroCtaActions": [{"label": "Use o OpenCode dentro do Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dê uma estrela no GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Baixe o aplicativo desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["O OpenCode é um agente de programação com IA, open-source e que prioriza o terminal, deliberadamente agnóstico quanto a modelos: você traz sua própria chave de provedor e roda qualquer modelo que quiser por trás do mesmo fluxo. Essa abertura o torna uma base natural para trabalho de design — mas, como todo agente, ele só produz boa UI quando você lhe dá as referências, skills e um loop de verificação certos. Este é um guia prático e completo para usar o OpenCode em trabalho de UI, frontend e design system, e para conectá-lo a um fluxo de design estruturado com o Open Design.", "Ele cobre o que o OpenCode realmente é, por que um agente aberto e agnóstico quanto a modelos se encaixa bem em design, como configurá-lo do zero, o loop de screenshot para UI, como o AGENTS.md e o MCP o estendem, como ele se compara ao Codex, ao Claude Code e ao Cursor, as armadilhas que fazem a saída de IA parecer genérica e como o Open Design fecha essa lacuna como uma camada de design aberta e local-first — uma combinação natural, já que ambos os projetos são open-source e rodam na sua própria máquina."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "Loop de feedback de design do OpenCode: um agente TUI no terminal, um navegador renderizando a UI e um espaço de trabalho, com uma seta de feedback voltando ao início", "caption": "O loop central: o OpenCode cria a UI no terminal, renderiza e a verifica em um navegador real e itera em direção às suas referências — em qualquer modelo que você escolher."}, "tocLabel": "Nesta página", "toc": [{"id": "what-is-opencode", "label": "O que o OpenCode realmente é"}, {"id": "why-design", "label": "Por que um agente aberto e de qualquer modelo se encaixa em design"}, {"id": "setup", "label": "Configure o OpenCode para design (do zero)"}, {"id": "screenshot-workflow", "label": "O fluxo de screenshot para UI"}, {"id": "extend", "label": "AGENTS.md, MCP e sessões compartilháveis"}, {"id": "vs", "label": "OpenCode vs Codex vs Claude Code vs Cursor"}, {"id": "pitfalls", "label": "Armadilhas e a aparência de “lixo de IA”"}, {"id": "open-design", "label": "Projetando com o OpenCode no Open Design"}, {"id": "faq", "label": "Perguntas frequentes"}], "sections": [{"id": "what-is-opencode", "heading": "O que o OpenCode realmente é", "blocks": [{"kind": "p", "text": "O OpenCode é um agente de programação com IA open-source feito para o terminal, mantido pelo time por trás do SST (Anomaly Innovations). Ele lê seu repositório, executa comandos, edita arquivos e conversa com um grande modelo de linguagem — mas, diferente dos agentes presos a um fornecedor, ele não traz seu próprio modelo. Você o aponta para qualquer provedor e modelo que quiser e traz sua própria chave."}, {"kind": "p", "text": "Ele roda como uma UI de terminal (TUI), com um aplicativo desktop e extensões para IDE em cima do mesmo motor. Por baixo, ele usa uma arquitetura cliente/servidor, então o agente que faz o trabalho é desacoplado da superfície a partir da qual você o controla. Dois agentes embutidos — build e plan — alternam com a tecla Tab."}, {"kind": "steps", "items": [{"label": "Agnóstico quanto a modelos", "body": "Os modelos e provedores vêm do models.dev, um catálogo aberto. Você os configura no opencode.json com uma string provider/model-id e pode desabilitar provedores que não quer carregar — então o mesmo fluxo de design roda em Anthropic, OpenAI, Google, OpenRouter, modelos locais e mais."}, {"label": "Arquivo de instruções", "body": "O OpenCode lê um arquivo AGENTS.md no seu projeto (o padrão entre ferramentas, também compatível com CLAUDE.md) para as regras do projeto — o lugar natural para codificar suas convenções de design. Execute /init para gerar um."}, {"label": "Extensível", "body": "Ele suporta integração com LSP, servidores MCP, temas, atalhos de teclado e comandos personalizados, além de links de sessão compartilháveis para colaboração."}]}, {"kind": "ul", "items": ["Mantenedor: SST / Anomaly Innovations (projeto open-source)", "Credencial: sua(s) própria(s) chave(s) de API de provedor de modelo — BYOK, sem lock-in de fornecedor", "Licença: MIT, open source"]}]}, {"id": "why-design", "heading": "Por que um agente aberto e de qualquer modelo se encaixa em trabalho de design", "blocks": [{"kind": "p", "text": "O OpenCode não tem um único “modelo de design” como tem um agente de fornecedor — e é esse o ponto. Como ele é agnóstico quanto a modelos e aberto, você pode rodar o mesmo fluxo de design em qualquer modelo que esteja atualmente melhor em frontend, trocá-lo depois ou recorrer a um modelo local, tudo sem mudar sua configuração."}, {"kind": "p", "text": "Mas a escolha do modelo sozinha não compra bom gosto. Como todo agente de programação, o OpenCode produz UI genérica a menos que você lhe dê restrições. Boa saída de design vem de três insumos que você fornece."}, {"kind": "steps", "items": [{"label": "Um design system", "body": "Tokens, primitivos e convenções reais que o agente reutiliza, para que a saída combine com uma marca em vez de cair em uma aparência genérica."}, {"label": "Uma skill estética", "body": "Uma skill curada que impõe bom gosto de verdade — movimento contido, hierarquia que prioriza a marca, no máximo dois tipos de fonte e uma cor de destaque — e faz o agente se comprometer com uma direção antes de construir."}, {"label": "Referências concretas", "body": "Imagens de referência reais e múltiplos estados (desktop e mobile, hover, vazio, carregando), não uma única imagem de destaque."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Diagrama mostrando design system, skill e imagem de referência convergindo para um bom resultado de design", "caption": "O bom gosto vem de três insumos que você fornece: um design system, uma skill e imagens de referência reais — independentemente do modelo que você roda."}, {"kind": "p", "text": "A lição: o OpenCode lhe dá liberdade de modelo, mas o bom gosto ainda vem de um contexto de design curado. O Open Design empacota exatamente esses insumos, e é por isso que os dois se encaixam — ambos são open-source e local-first (mais sobre isso abaixo)."}]}, {"id": "setup", "heading": "Configure o OpenCode para trabalho de design, do zero", "blocks": [{"kind": "p", "text": "Aqui está o caminho completo, de uma máquina limpa até um OpenCode capaz de criar e verificar UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Fluxo de configuração em cinco passos: instalar, autenticar com sua chave de provedor, configurar o AGENTS.md, adicionar uma skill, verificar", "caption": "A sequência de configuração: instalar → autenticar (sua chave de provedor) → configurar o AGENTS.md → adicionar uma skill → verificar em um navegador real."}, {"kind": "steps", "items": [{"label": "Codifique suas regras de design", "body": "Coloque seus tokens, primitivos e convenções no AGENTS.md (ou em um DESIGN.md referenciado a partir dele) para que a saída combine com uma marca em vez de cair em uma aparência genérica. A opção instructions no opencode.json pode apontar para arquivos de regras adicionais via globs."}, {"label": "Escolha um modelo capaz", "body": "Como o OpenCode é agnóstico quanto a modelos, escolha o provedor/modelo que estiver atualmente mais forte em frontend para a passada de design — e mantenha o resto do seu fluxo inalterado."}]}]}, {"id": "screenshot-workflow", "heading": "O fluxo de screenshot para UI", "blocks": [{"kind": "p", "text": "O loop de design de maior alavancagem com qualquer agente é transformar uma imagem de referência em uma UI funcional e responsiva e iterar até que ela corresponda. A mesma forma de cinco passos se aplica no OpenCode."}, {"kind": "ol", "items": ["Comece pelas referências visuais mais claras que você tiver — e inclua múltiplos estados (desktop e mobile, hover, vazio, carregando), não apenas uma única imagem de destaque.", "Seja específico no prompt; prompts vagos produzem UI genérica.", "Prepare um design system e diga ao OpenCode onde ficam os tokens e os primitivos canônicos (no AGENTS.md).", "Rode um servidor de desenvolvimento e faça o agente renderizar em um navegador real, redimensionando para os breakpoints para checar o resultado.", "Itere fazendo o OpenCode comparar sua implementação de volta com as capturas de tela — em vez de apenas confirmar que o build funciona."]}, {"kind": "p", "text": "Referencie arquivos com @ na TUI para uma busca aproximada no seu diretório de trabalho, execute comandos de shell inline com um ! inicial e dispare ações com comandos /. Então escreva o prompt com restrições concretas:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Mantenha os prompts pequenos e focados, faça commit das boas iterações e reverta as ruins (avisando o OpenCode quando reverter), para que cada passada parta de uma base limpa."}]}, {"id": "extend", "heading": "AGENTS.md, MCP e sessões compartilháveis", "blocks": [{"kind": "p", "text": "Três pontos de extensão tornam o OpenCode prático para trabalho de design sustentado, e todos os três mapeiam de forma limpa para um fluxo de design aberto."}, {"kind": "steps", "items": [{"label": "Regras do AGENTS.md", "body": "As regras de projeto vivem em um AGENTS.md na raiz do repositório (ou regras globais em ~/.config/opencode/AGENTS.md). É a casa durável das suas convenções de design, lida a cada execução, e é compatível com os arquivos CLAUDE.md que outros agentes usam."}, {"label": "Servidores MCP", "body": "O OpenCode suporta servidores MCP locais (comando) e remotos (URL), configurados sob a chave mcp — a forma portátil de trazer contexto de design e ferramentas externas que funcionam entre agentes, não só no OpenCode."}, {"label": "Sessões compartilháveis", "body": "O comando /share cria um link público para uma conversa para colaboração ou revisão, e o /unshare o revoga — útil para obter feedback sobre uma passada de design."}]}, {"kind": "p", "text": "Essas são capacidades portáteis e multiagente — exatamente o tipo de coisa que o Open Design foi feito para orquestrar, em vez de recriar projeto a projeto."}]}, {"id": "vs", "heading": "OpenCode vs Codex vs Claude Code vs Cursor para design", "blocks": [{"kind": "p", "text": "Não há um único vencedor para o trabalho de design — cada agente tem uma força diferente, e times experientes os combinam. Um resumo justo:"}, {"kind": "table", "columns": ["Agente", "Força em design", "Melhor para"], "rows": [["OpenCode", "Open-source e agnóstico quanto a modelos; rode qualquer provedor por trás de um único fluxo no terminal", "Liberdade BYOK, troca de modelos, configurações totalmente abertas e local-first"], ["Codex", "Forte refinamento visual com uma skill de frontend; compreensão de imagens", "Builds delegados, assíncronos e em sandbox, regras portáteis em AGENTS.md"], ["Claude Code", "Decisões de design específicas (hex, espaçamento, tipografia) e UX ciente da base de código", "Raciocínio de frontend e refatorações com contexto amplo"], ["Cursor", "Loop visual de criar e ver com preview ao vivo e edições inline", "Trabalho de UI em iteração rápida e observação dentro de uma IDE"]]}, {"kind": "p", "text": "O veredito recorrente da comunidade é que o bom gosto vem dos humanos: todos eles caem em uma estética genérica sem skills, referências e restrições. Esse é o problema real a resolver — e ele tem forma de ferramenta de design, não de modelo, que é precisamente por que um agente aberto como o OpenCode combina tão bem com uma camada de design aberta."}]}, {"id": "pitfalls", "heading": "Armadilhas e como evitar a aparência de “lixo de IA”", "blocks": [{"kind": "p", "text": "A reclamação mais comum sobre o design gerado por IA é que ele parece genérico — gradientes suaves, painéis flutuantes, cantos arredondados exagerados, sombras dramáticas, uma vibe de Inter-e-roxo que “grita que uma IA fez isso”. Outros problemas relatados incluem layouts mobile quebrados e instruções vazando para o texto da UI. Nenhum deles é exclusivo do OpenCode; é o que acontece quando qualquer agente roda sem um contexto de design curado."}, {"kind": "steps", "items": [{"label": "Adicione uma skill estética", "body": "Uma skill de design curada força o agente a se comprometer com uma direção real em vez da aparência padrão."}, {"label": "Verifique em um navegador real", "body": "Renderize e verifique a si mesmo nos diferentes breakpoints para que os layouts não quebrem silenciosamente no mobile."}, {"label": "Forneça tokens e referências", "body": "Tokens de design reais e capturas de tela de referência são a maior alavanca isolada sobre a qualidade da saída."}, {"label": "Codifique regras no AGENTS.md", "body": "Coloque regras de estilo como “sem hero cards, no máximo dois tipos de fonte, hierarquia que prioriza a marca” onde o agente as lê a cada execução."}]}, {"kind": "p", "text": "Note que toda mitigação tem a ver com dar ao agente um contexto de design curado — independentemente do modelo que você roda. Manter esse contexto na mão, projeto a projeto, é o trabalho braçal que o Open Design elimina."}]}, {"id": "open-design", "heading": "Projetando com o OpenCode dentro do Open Design", "blocks": [{"kind": "p", "text": "O Open Design é a camada de design open-source que o fluxo acima fica pedindo. Ele trata o OpenCode como um adaptador de primeira parte e o envolve em uma biblioteca curada de skills e design systems, um pipeline de renderização estruturado e uma UI desktop local — para que o contexto de design que torna qualquer agente bom esteja presente desde a primeira execução, e não montado à mão a cada vez. Ambos os projetos são open-source e local-first, o que torna a combinação um encaixe natural."}, {"kind": "ol", "items": ["Instale o Open Design e selecione o OpenCode como seu agente.", "Autentique-se com sua própria chave de API de provedor de modelo (BYOK) — as credenciais permanecem na sua máquina e nunca passam por um proxy nosso.", "Escolha qualquer provedor e modelo, mais um design system e uma skill, e então gere decks, protótipos e landing pages com bom gosto consistente.", "Cada artefato e arquivo DESIGN.md vive no seu próprio repositório, não em uma nuvem hospedada."]}, {"kind": "p", "text": "O mesmo agente OpenCode, a mesma liberdade de modelo — mais um fluxo de design real, portátil e open-source ao redor. É local-first e Apache-2.0, então nada do seu trabalho ou das suas credenciais sai da sua máquina."}]}], "faqTitle": "Perguntas frequentes", "faq": [{"name": "O OpenCode realmente consegue fazer trabalho de design?", "text": "Sim — com uma skill estética, um design system e imagens de referência reais no contexto, o OpenCode produz UI responsiva e de qualidade de produção e pode verificá-la em um navegador. Como ele é agnóstico quanto a modelos, você roda qualquer modelo que esteja atualmente melhor em frontend. Sem esse contexto curado, ele tende a cair em uma aparência genérica, e é essa a lacuna que o Open Design preenche."}, {"name": "Qual modelo devo usar com o OpenCode para design?", "text": "O que você preferir — o OpenCode é agnóstico quanto a provedores via models.dev, então você pode rodar Anthropic, OpenAI, Google, OpenRouter ou modelos locais por trás do mesmo fluxo e trocar a qualquer momento. A qualidade da saída de design depende muito mais da sua skill, do seu design system e das suas referências do que do modelo sozinho."}, {"name": "O Open Design é feito pelo time do OpenCode (SST)?", "text": "Não. O Open Design é um projeto open-source independente que integra o OpenCode como um agente. Ele complementa o OpenCode com uma biblioteca aberta e local-first de skills e design systems."}, {"name": "Preciso de uma assinatura especial para projetar com o OpenCode?", "text": "Não — o OpenCode é BYOK. Você traz sua própria chave de API de provedor de modelo, e o Open Design nunca usa um proxy para suas credenciais. Não há lock-in de fornecedor."}, {"name": "OpenCode, Codex ou Claude Code para design de frontend?", "text": "Todos são fortes, e muitos times os combinam. A vantagem do OpenCode é ser totalmente open-source e agnóstico quanto a modelos; o Codex se destaca em builds delegados e em sandbox; o Claude Code é conhecido por decisões de design específicas e cientes da base de código. O Open Design permite trocar de agente sem mudar o seu fluxo de design."}, {"name": "Como estendo o OpenCode para contexto de design?", "text": "Codifique regras no AGENTS.md, adicione servidores MCP sob a chave mcp para ferramentas portáteis e contexto de design, e use sessões compartilháveis para revisão. O Open Design oferece uma biblioteca curada de skills e design systems para que você pule a configuração projeto a projeto."}, {"name": "O Open Design é afiliado ao OpenCode ou ao SST?", "text": "Não. O OpenCode é um projeto open-source mantido pelo SST (Anomaly Innovations); o Open Design é um projeto open-source independente que o suporta como um adaptador de primeira parte."}, {"name": "Meus arquivos e credenciais estão seguros?", "text": "Sim — o Open Design é local-first. Seus arquivos, artefatos e DESIGN.md permanecem no seu próprio repositório, e suas credenciais de provedor de modelo são usadas diretamente pelo seu agente, nunca roteadas por servidores do Open Design."}], "ctaTitle": "Projete com o OpenCode, do jeito aberto.", "ctaBody": "Traga sua própria chave de provedor de modelo, mantenha cada arquivo local e tenha uma biblioteca de design curada ao redor do agente aberto que você já usa.", "ctaActions": [{"label": "Use o OpenCode dentro do Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Dê uma estrela no GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Baixe o aplicativo desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Veja todos os agentes suportados"}, + }, + }, + }; +} diff --git a/apps/landing-page/app/agent-guides.part-c.i18n.ts b/apps/landing-page/app/agent-guides.part-c.i18n.ts new file mode 100644 index 0000000000..4c56ab67ff --- /dev/null +++ b/apps/landing-page/app/agent-guides.part-c.i18n.ts @@ -0,0 +1,186 @@ +/* + * Localized agent-guide copy (part C) for the landing-page agent detail pages. + * + * Split across part files to stay under the repo's changed-file blob guard. + * Each part spreads the English guide first (so non-rendered compact fields + * stay type-complete) then overrides the rendered fields + rich payload with + * the translation. Machine-translated from English; native review welcome. + */ +import type { InfoPageCopy } from './info-page-i18n'; +import type { LandingLocaleCode } from './i18n'; + +type Guides = NonNullable; + + +export function localizedAgentGuidesPartC(en: Guides): Partial> { + return { + 'it': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code per il design — Open Design", + description: "Come i designer usano Claude Code per il design di UI e web, e come Open Design lo trasforma in un vero agente di design — local-first, BYOK, con una libreria curata di skill e design system.", + breadcrumb: "Claude Code", + label: "Agente · Claude Code", + heading: "Claude Code per il design.", + lead: "Claude Code è l'agente di coding da terminale di Anthropic. Le persone lo usano già per costruire UI, design system e landing page. Open Design lo collega a un vero flusso di lavoro di design — porta la tua chiave Anthropic o il tuo abbonamento Claude, mantieni ogni file in locale.", + rich: {"heroCtaLead": "Open Design trasforma Claude Code in un agente di design open-source e local-first — la tua chiave Anthropic o il tuo abbonamento Claude, i tuoi file, una libreria curata di skill e design system tutt'intorno.", "heroCtaActions": [{"label": "Usa Claude Code dentro Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Metti una stella su GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Scarica l'app desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code è ampiamente considerato l'agente di coding con il miglior gusto per il frontend — ragiona sulle interfacce con una specificità insolita, indicando valori hex esatti, spaziature e scale tipografiche, e rifattorizza la UI in un'intera grande codebase senza perdere il filo. Ma, di base, tende comunque a derivare verso un look generico a meno che non gli si forniscano un design system, delle skill e dei riferimenti reali. Questa è una guida pratica ed end-to-end all'uso di Claude Code per UI, frontend e design system, e a come integrarlo in un flusso di lavoro strutturato con Open Design.", "Copre cos'è realmente Claude Code, perché è forte nel frontend, come configurarlo da zero, il flusso di lavoro con CLAUDE.md e le Skill, il round-trip ufficiale con Figma, come si confronta con Codex e Cursor, le insidie che fanno apparire generico l'output dell'IA e come Open Design colma il divario come layer di design aperto e local-first."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Il ciclo di feedback del design con Claude Code: l'agente da terminale che prende decisioni di design specifiche, un browser che renderizza la UI e uno spazio di lavoro, con una freccia di feedback che ritorna", "caption": "Il ciclo centrale: Claude Code ragiona su decisioni di UI specifiche nel terminale, le renderizza e le verifica in un browser reale e converge rispetto ai tuoi riferimenti."}, "tocLabel": "In questa pagina", "toc": [{"id": "what-is-claude-code", "label": "Cos'è realmente Claude Code"}, {"id": "why-design", "label": "Perché Claude Code è bravo nel design"}, {"id": "setup", "label": "Configurare Claude Code per il design (da zero)"}, {"id": "skills-workflow", "label": "Il flusso di lavoro con CLAUDE.md e le Skill"}, {"id": "figma", "label": "Round-trip Claude Code + Figma"}, {"id": "vs", "label": "Claude Code vs Codex vs Cursor"}, {"id": "pitfalls", "label": "Insidie e l'estetica da \"sbobba dell'IA\""}, {"id": "open-design", "label": "Progettare con Claude Code in Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-claude-code", "heading": "Cos'è realmente Claude Code", "blocks": [{"kind": "p", "text": "Claude Code è lo strumento di coding agentico di Anthropic. Legge la tua codebase, modifica file, esegue comandi e si integra con i tuoi strumenti di sviluppo — pianificando, scrivendo e verificando il lavoro a partire da compiti in linguaggio naturale, anziché limitarsi a completare righe in autocompletamento."}, {"kind": "p", "text": "È disponibile su diverse superfici che condividono tutte lo stesso motore: una CLI da terminale, estensioni IDE per VS Code, Cursor e JetBrains, un'app desktop con revisione visiva delle diff e un'esperienza web per i task a lunga esecuzione. I tuoi file CLAUDE.md, le impostazioni e i server MCP ti seguono su tutte."}, {"kind": "steps", "items": [{"label": "File di istruzioni", "body": "Claude Code legge un file CLAUDE.md nella root del progetto all'inizio di ogni sessione — il posto naturale dove codificare le tue convenzioni di design, i tokens e le checklist di revisione."}, {"label": "Skill", "body": "Le Agent Skill impacchettano istruzioni, script e risorse riutilizzabili che Claude carica su richiesta, inclusa la skill ufficiale Frontend Design di Anthropic per il gusto estetico."}, {"label": "Pianificazione e subagenti", "body": "Può pianificare prima di agire e generare subagenti che lavorano in parallelo su parti diverse di un task, il che mantiene coerenti i grandi refactoring di UI."}]}, {"kind": "ul", "items": ["Fornitore: Anthropic", "Credenziale: chiave API Anthropic (BYOK, tramite la Console) o un abbonamento Claude (Pro / Max)", "Superfici: CLI da terminale, estensioni VS Code / Cursor / JetBrains, app desktop, web"]}]}, {"id": "why-design", "heading": "Perché Claude Code è bravo nel design", "blocks": [{"kind": "p", "text": "Tra gli agenti di coding, Claude Code ha la reputazione di avere gusto nel lavoro frontend. Alcune cose lo spiegano."}, {"kind": "steps", "items": [{"label": "Decisioni specifiche, non vaghe", "body": "Claude Code tende a impegnarsi su scelte concrete — valori hex esatti, scale di spaziatura, ramp tipografici e gerarchia dei componenti — invece di tergiversare, ed è proprio questo che distingue una vera interfaccia da un segnaposto."}, {"label": "Ragionamento consapevole della codebase", "body": "Con un ampio contesto di lavoro rifattorizza la UI su molti file contemporaneamente, riutilizzando i tuoi componenti e tokens esistenti invece di reinventare stili improvvisati."}, {"label": "Una skill frontend ufficiale", "body": "Anthropic include una skill Frontend Design che fa scrivere a Claude prima una direzione di design e lo allontana deliberatamente da font di sistema generici e prevedibili gradienti viola."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Diagramma che mostra design system, skill e immagine di riferimento che convergono in un buon output di design", "caption": "Il gusto nasce da tre input che fornisci tu: un design system, una skill e immagini di riferimento reali."}, {"kind": "p", "text": "La lezione è la stessa che Anthropic ripete sui propri modelli: Claude non ha gusto di default — lasciato a sé converge verso il centro statistico del web design (Inter, gradienti viola, ombre soft). Produce buon design quando gli dai dei vincoli. Open Design impacchetta esattamente quegli input, ed è per questo che i due si combinano bene (più sotto)."}]}, {"id": "setup", "heading": "Configurare Claude Code per il lavoro di design, da zero", "blocks": [{"kind": "p", "text": "Ecco il percorso completo, da una macchina pulita a un Claude Code in grado di costruire e verificare la UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Flusso di configurazione in cinque passi: installa, autentica, configura CLAUDE.md, aggiungi la skill, verifica", "caption": "La sequenza di configurazione: installa → autentica → configura CLAUDE.md → aggiungi la skill Frontend Design → abilita la verifica nel browser."}, {"kind": "steps", "items": [{"label": "Codifica le tue regole di design", "body": "Inserisci i tuoi tokens, le primitive e le convenzioni in CLAUDE.md e indirizza Claude verso di essi, così l'output rispetta un brand invece di ripiegare su un look generico."}, {"label": "Aggiungi la verifica nel browser", "body": "Collega un MCP Playwright o Chrome così Claude renderizza in un browser reale e controlla il proprio output sui vari breakpoint, invece di confermare solo che la build passa."}]}]}, {"id": "skills-workflow", "heading": "Il flusso di lavoro con CLAUDE.md e le Skill", "blocks": [{"kind": "p", "text": "Il ciclo di design a maggior leva con Claude Code consiste nel fornirgli riferimenti reali più il tuo contesto di design, e poi iterare finché la UI non corrisponde — con CLAUDE.md e le Skill a portare i vincoli, così da non doverli rispiegare a ogni prompt."}, {"kind": "ol", "items": ["Parti dai riferimenti visivi più chiari di cui disponi — e includi più stati (desktop e mobile, hover, vuoto, caricamento), non solo un'unica immagine hero.", "Sii specifico nel prompt; prompt vaghi producono UI generiche anche con un agente forte.", "Tieni il tuo design system e le tue convenzioni in CLAUDE.md, e indica a Claude dove si trovano i tokens e le primitive canoniche.", "Aggiungi la skill Frontend Design così Claude si impegna su una vera direzione estetica prima di scrivere codice.", "Collega la verifica nel browser così Claude renderizza, ridimensiona ai breakpoint e confronta con i riferimenti — non si limita a confermare che la build funziona."]}, {"kind": "p", "text": "Inserisci un'immagine di riferimento nella sessione e formula il prompt con vincoli concreti:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Tieni in esecuzione un dev server a fianco, mantieni i prompt piccoli e mirati e fai commit delle buone iterazioni / revert di quelle cattive (avvisando Claude quando fai revert) così ogni passaggio si costruisce su una base pulita. Usa la modalità plan per i refactoring più grandi così da poter rivedere l'approccio prima di qualsiasi modifica ai file."}]}, {"id": "figma", "heading": "Claude Code + Figma: round-trip design ↔ codice", "blocks": [{"kind": "p", "text": "Nel febbraio 2026 Anthropic e Figma hanno rilasciato un'integrazione bidirezionale di prima classe tramite il server Figma MCP. Funziona in entrambe le direzioni."}, {"kind": "steps", "items": [{"label": "Design → Codice", "body": "Seleziona un frame in Figma o incolla un link in Claude Code, recupera il contesto di design e chiedigli di implementarlo usando la tua libreria di componenti esistente. Code Connect mantiene l'output allineato ai tuoi componenti reali."}, {"label": "Codice → Design", "body": "Costruisci e visualizza in anteprima una funzionalità nel browser, poi di' \"Send this to Figma\" per catturare la UI in esecuzione come layer Figma modificabili — l'intera schermata o un elemento selezionato."}]}, {"kind": "p", "text": "Installalo una volta con claude plugin install figma@claude-plugins-official (la modalità Dev Mode MCP richiede un piano Figma a pagamento). Lo stesso Figma MCP è disponibile per Claude Code, Codex, Cursor e VS Code — esattamente il tipo di capacità portabile e multi-agente che Open Design è costruito per orchestrare."}]}, {"id": "vs", "heading": "Claude Code vs Codex vs Cursor per il design", "blocks": [{"kind": "p", "text": "Non c'è un unico vincitore per il lavoro di design — ogni agente ha un punto di forza diverso e i team esperti li combinano. Un riassunto equo:"}, {"kind": "table", "columns": ["Agente", "Punto di forza nel design", "Ideale per"], "rows": [["Claude Code", "Decisioni di design specifiche (hex, spaziatura, tipografia) e ragionamento UX consapevole della codebase", "Ragionamento frontend e refactoring a grande contesto"], ["Codex", "Forte rifinitura visiva e comprensione delle immagini; build asincrone in sandbox", "Build asincrone delegate e regole AGENTS.md portabili"], ["Cursor", "Ciclo visivo costruisci-e-osserva con anteprima live e modifiche inline", "Lavoro di UI iterativo e a vista all'interno di un IDE"]]}, {"kind": "p", "text": "Il verdetto ricorrente della community è che il gusto viene dagli esseri umani: tutti e tre, senza skill, riferimenti e vincoli, ripiegano su un'estetica generica. È questo il vero problema da risolvere — ed è di forma da strumento di design, non da modello."}]}, {"id": "pitfalls", "heading": "Insidie, e come evitare l'estetica da \"sbobba dell'IA\"", "blocks": [{"kind": "p", "text": "Anche con la reputazione di gusto di Claude Code, la lamentela più comune sul design generato dall'IA è che appare generico — font Inter, gradienti viola su bianco, ombre soft, angoli arrotondati esagerati, un'estetica che \"urla che l'ha fatto un'IA\". Anthropic stessa lo attribuisce alla convergenza distributiva: le scelte sicure dominano i dati di addestramento del web. Altri problemi segnalati includono layout mobile rotti e istruzioni che trapelano nel testo della UI."}, {"kind": "steps", "items": [{"label": "Installa la skill Frontend Design", "body": "Costringe Claude a impegnarsi su una vera direzione ed evita esplicitamente font e gradienti abusati dall'IA."}, {"label": "Abilita la verifica nel browser", "body": "Fai renderizzare Claude e auto-controllare sui vari breakpoint così i layout non si rompono in silenzio su mobile."}, {"label": "Fornisci tokens e riferimenti", "body": "Tokens di design reali e screenshot di riferimento sono la singola leva più grande sulla qualità dell'output."}, {"label": "Codifica le regole in CLAUDE.md", "body": "Metti regole in stile \"niente hero card, al massimo due caratteri, gerarchia brand-first\" dove l'agente le legge a ogni esecuzione."}]}, {"kind": "p", "text": "Nota che ogni mitigazione consiste nel dare all'agente un contesto di design curato. Mantenere quel contesto a mano, progetto per progetto, è la fatica che Open Design elimina."}]}, {"id": "open-design", "heading": "Progettare con Claude Code dentro Open Design", "blocks": [{"kind": "p", "text": "Open Design è il layer di design open-source che il flusso di lavoro qui sopra continua a richiedere. Tratta Claude Code come un adattatore di prima parte e lo avvolge in una libreria curata di skill e design system, una pipeline di rendering strutturata e una UI desktop locale — così il contesto di design che rende bravo Claude Code è presente fin dalla prima esecuzione, non assemblato a mano ogni volta."}, {"kind": "ol", "items": ["Installa Open Design e seleziona Claude Code come tuo agente.", "Autenticati con la tua chiave API Anthropic (BYOK) o il tuo abbonamento Claude — le credenziali restano sulla tua macchina e non vengono mai instradate tramite noi.", "Scegli un design system e una skill, poi genera deck, prototipi e landing page con un gusto coerente.", "Ogni artefatto e file DESIGN.md vive nella tua repo, non in un cloud ospitato."]}, {"kind": "p", "text": "Stesso agente Claude Code, stessa chiave — più un vero flusso di lavoro di design portabile e open-source tutt'intorno. È local-first e Apache-2.0, quindi nulla del tuo lavoro o delle tue credenziali lascia la tua macchina."}]}], "faqTitle": "Domande frequenti", "faq": [{"name": "Claude Code è adatto al lavoro di design?", "text": "Sì — è ampiamente considerato l'agente di coding con il miglior gusto per il frontend, capace di decisioni specifiche e consapevoli della codebase su valori hex, spaziatura e scale tipografiche. Con la skill Frontend Design, un design system e immagini di riferimento reali nel contesto produce UI responsive di qualità da produzione e può verificarla in un browser. Senza quel contesto tende a ripiegare su un look generico, ed è il divario che Open Design colma."}, {"name": "Mi serve un abbonamento Claude per progettare con Claude Code?", "text": "Puoi usare sia una chiave API Anthropic (BYOK, tramite la Console) sia un abbonamento Claude (Pro / Max). In ogni caso Open Design non instrada mai le tue credenziali — vengono usate direttamente dal tuo agente sulla tua macchina."}, {"name": "Claude Code o Codex per il design frontend?", "text": "Entrambi sono forti. Claude Code è noto per decisioni di design specifiche e consapevoli della codebase e per il ragionamento frontend; Codex ha una forte rifinitura visiva ed eccelle nelle build delegate e in sandbox. Molti team usano entrambi — Open Design ti permette di cambiare agente senza modificare il tuo flusso di lavoro di design."}, {"name": "Come collego Claude Code a Figma?", "text": "Installa il plugin Figma ufficiale con claude plugin install figma@claude-plugins-official. Potrai poi implementare i frame di Figma in codice usando il contesto di design, e riportare una UI in esecuzione verso frame Figma modificabili con \"Send this to Figma\". La modalità Dev Mode MCP richiede un piano Figma a pagamento."}, {"name": "Cosa sono le Skill e CLAUDE.md?", "text": "CLAUDE.md è un file markdown nella root del tuo progetto che Claude Code legge all'inizio di ogni sessione — il posto dove codificare le tue convenzioni di design. Le Skill impacchettano istruzioni e risorse riutilizzabili che Claude carica su richiesta, inclusa la skill ufficiale Frontend Design di Anthropic. Open Design include una libreria curata di entrambe, così salti la configurazione progetto per progetto."}, {"name": "Come evito l'estetica generica da \"sbobba dell'IA\"?", "text": "Installa la skill Frontend Design, fornisci tokens di design reali e screenshot di riferimento, codifica le regole del brand in CLAUDE.md e abilita la verifica nel browser. Open Design li include come libreria curata, così salti la configurazione progetto per progetto."}, {"name": "Open Design è affiliato ad Anthropic?", "text": "No. Claude Code è un prodotto di Anthropic; Open Design è un progetto open-source indipendente che lo supporta come adattatore di prima parte. Claude e Claude Code sono marchi di Anthropic."}, {"name": "I miei file e le mie credenziali sono al sicuro?", "text": "Sì — Open Design è local-first e Apache-2.0. I tuoi file, gli artefatti e DESIGN.md restano nella tua repo, e le tue credenziali Anthropic vengono usate direttamente dal tuo agente, mai instradate attraverso i server di Open Design."}], "ctaTitle": "Progetta con Claude Code, in modo aperto.", "ctaBody": "Porta la tua chiave Anthropic o il tuo abbonamento Claude, mantieni ogni file in locale e ottieni una libreria di design curata intorno all'agente che già usi.", "ctaActions": [{"label": "Usa Claude Code dentro Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Metti una stella su GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Scarica l'app desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Vedi tutti gli agenti supportati"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex per il design — Open Design", + description: "Come le persone usano OpenAI Codex per il design di UI e web — il plugin Product Design, l'integrazione con Figma, le skill frontend — e come Open Design trasforma Codex in un agente di design open-source e local-first.", + breadcrumb: "Codex", + label: "Agente · Codex", + heading: "Codex per il design.", + lead: "Codex è l'agente di coding di OpenAI. Con il suo plugin Product Design e l'integrazione con Figma è diventato un serio strumento di design. Open Design collega Codex a un flusso di lavoro di design open-source — la tua chiave OpenAI o il tuo abbonamento ChatGPT, i tuoi file, local-first.", + rich: {"heroCtaLead": "Open Design trasforma Codex in un agente di design open-source e local-first — la tua chiave OpenAI, i tuoi file, una libreria curata di skill e design system tutt'intorno.", "heroCtaActions": [{"label": "Usa Codex dentro Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Metti una stella su GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Scarica l'app desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex è nato come generatore di codice, ma nel 2026 è diventato uno strumento credibile per progettare interfacce reali — una volta che gli fornisci i riferimenti giusti, le skill e un ciclo di verifica. Questa è una guida pratica ed end-to-end all'uso di Codex per UI, frontend e design system, e a come integrarlo in un flusso di lavoro di design strutturato con Open Design.", "Copre cos'è Codex oggi, perché è improvvisamente bravo nel frontend, come configurarlo da zero, il ciclo screenshot-to-UI, il round-trip ufficiale con Figma, come si confronta con Cursor e Claude Code, le insidie che fanno apparire generico l'output dell'IA e come Open Design colma il divario come layer di design aperto e local-first."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Il ciclo di feedback del design con Codex: l'agente da terminale, il browser che renderizza la UI e uno spazio di lavoro, con una freccia di feedback che ritorna", "caption": "Il ciclo centrale: Codex costruisce la UI nel terminale, la renderizza e la verifica in un browser reale e itera rispetto ai tuoi riferimenti."}, "tocLabel": "In questa pagina", "toc": [{"id": "what-is-codex", "label": "Cos'è realmente OpenAI Codex"}, {"id": "why-design", "label": "Perché ora Codex è bravo nel design"}, {"id": "setup", "label": "Configurare Codex per il design (da zero)"}, {"id": "screenshot-workflow", "label": "Il flusso di lavoro screenshot-to-UI"}, {"id": "figma", "label": "Round-trip Codex + Figma"}, {"id": "vs", "label": "Codex vs Cursor vs Claude Code"}, {"id": "pitfalls", "label": "Insidie e l'estetica da \"sbobba dell'IA\""}, {"id": "open-design", "label": "Progettare con Codex in Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-codex", "heading": "Cos'è realmente OpenAI Codex (e cosa non è)", "blocks": [{"kind": "p", "text": "Prima, una disambiguazione che inganna quasi tutti quelli che cercano \"Codex\". L'originale OpenAI Codex era un modello di completamento del codice del 2021 che alimentava i primi GitHub Copilot ed è stato deprecato nel 2023. Non è di questo che parla questa pagina. Il Codex di oggi è lo strumento di coding agentico di OpenAI — pianifica, scrive, esegue e verifica codice a partire da compiti in linguaggio naturale."}, {"kind": "p", "text": "Il Codex moderno è disponibile su quattro superfici: una CLI da terminale (riscritta in Rust, con licenza Apache-2.0), un'estensione IDE per VS Code, Cursor e Windsurf, un'esperienza cloud/web per task asincroni delegati e un'app desktop con un browser integrato e Computer Use."}, {"kind": "steps", "items": [{"label": "Modello predefinito", "body": "A metà 2026 il modello raccomandato è gpt-5.5, con gpt-5.4 come modello che OpenAI ha addestrato esplicitamente per il frontend e il computer use."}, {"label": "File di istruzioni", "body": "Codex legge un file AGENTS.md nel tuo progetto (uno standard cross-tool) per le regole di progetto — il posto naturale dove codificare le tue convenzioni di design."}, {"label": "Sandbox", "body": "Gira in una sandbox a livello kernel (workspace-write di default), così un agente che modifica la tua UI non può vagare al di fuori del progetto."}]}, {"kind": "ul", "items": ["Fornitore: OpenAI", "Credenziale: chiave API OpenAI (BYOK) o abbonamento ChatGPT (Free / Go / Plus / Pro / Business / Enterprise)", "Licenza della CLI: Apache-2.0, open source"]}]}, {"id": "why-design", "heading": "Perché ora Codex è bravo nel design", "blocks": [{"kind": "p", "text": "Tre cose sono convergute all'inizio del 2026 per rendere Codex un vero strumento di design anziché un generatore di codice generico."}, {"kind": "steps", "items": [{"label": "Un modello addestrato per il frontend", "body": "OpenAI ha rilasciato GPT-5.4, il suo primo modello mainline addestrato per il frontend e il computer use, con una comprensione delle immagini molto migliore lungo tutto il flusso di design e un'auto-verifica più solida. Può persino generare mood board e opzioni visive prima di impegnarsi sugli asset finali."}, {"label": "Una skill frontend ufficiale", "body": "Il catalogo openai/skills include una skill frontend curata che impone vero gusto: layout senza card, hero a tutto schermo, gerarchia brand-first, movimento contenuto, al massimo due caratteri e un colore d'accento — e fa scrivere a Codex una tesi visiva prima di costruire."}, {"label": "Verifica nel browser", "body": "Con la skill Playwright Codex apre un browser reale, ridimensiona ai breakpoint e confronta il proprio output con il riferimento invece di limitarsi a controllare che la build passi."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Diagramma che mostra design system, skill e immagine di riferimento che convergono in un buon output di design", "caption": "Il gusto nasce da tre input che fornisci tu: un design system, una skill e immagini di riferimento reali."}, {"kind": "p", "text": "La lezione dietro tutte e tre: Codex non ha gusto di default. Produce buon design quando gli dai dei vincoli — un design system, una skill estetica e riferimenti concreti. Open Design impacchetta esattamente quegli input, ed è per questo che i due si combinano bene (più sotto)."}]}, {"id": "setup", "heading": "Configurare Codex per il lavoro di design, da zero", "blocks": [{"kind": "p", "text": "Ecco il percorso completo, da una macchina pulita a un Codex in grado di costruire e verificare la UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Flusso di configurazione in cinque passi: installa, autentica, configura, installa la skill, verifica", "caption": "La sequenza di configurazione: installa → autentica → configura AGENTS.md → installa la skill frontend → abilita la verifica nel browser."}, {"kind": "steps", "items": [{"label": "Codifica le tue regole di design", "body": "Inserisci i tuoi tokens, le primitive e le convenzioni in AGENTS.md o in un DESIGN.md e indirizza Codex verso di essi, così l'output rispetta un brand invece di ripiegare su un look generico."}, {"label": "Scegli il giusto livello di ragionamento", "body": "OpenAI osserva che livelli di ragionamento da basso a medio spesso producono risultati frontend migliori rispetto all'impostazione più alta."}]}]}, {"id": "screenshot-workflow", "heading": "Il flusso di lavoro screenshot-to-UI", "blocks": [{"kind": "p", "text": "Il ciclo di design a maggior leva con Codex consiste nel trasformare un'immagine di riferimento in una UI funzionante e responsive e iterare finché non corrisponde. Le linee guida di OpenAI si distillano in cinque passi."}, {"kind": "ol", "items": ["Parti dai riferimenti visivi più chiari di cui disponi — e includi più stati (desktop e mobile, hover, vuoto, caricamento), non solo un'unica immagine hero.", "Sii specifico nel prompt; prompt vaghi producono UI generiche.", "Prepara un design system e indica a Codex dove si trovano i tokens e le primitive canoniche.", "Abilita la skill interattiva Playwright così Codex renderizza in un browser reale e ridimensiona ai breakpoint.", "Itera facendo confrontare a Codex la propria implementazione con gli screenshot — non limitarti a confermare che la build funziona."]}, {"kind": "p", "text": "Fornisci le immagini trascinando uno screenshot nel terminale o con il flag image, poi formula il prompt con vincoli concreti:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Esegui un dev server in un secondo terminale, mantieni i prompt piccoli e mirati e fai commit delle buone iterazioni / revert di quelle cattive (avvisando Codex quando fai revert) così ogni passaggio si costruisce su una base pulita."}]}, {"id": "figma", "heading": "Codex + Figma: round-trip design ↔ codice", "blocks": [{"kind": "p", "text": "Nel febbraio 2026 OpenAI e Figma hanno annunciato una partnership ufficiale, trasformando la precedente beta del Figma MCP in un'integrazione bidirezionale di prima classe. Funziona in entrambe le direzioni."}, {"kind": "steps", "items": [{"label": "Design → Codice", "body": "Copia il \"link to selection\" di un frame in Figma, incollalo in Codex con get_design_context e chiedigli di implementare il design usando la tua libreria di componenti esistente."}, {"label": "Codice → Design", "body": "Lo strumento generate_figma_design (\"Code to Canvas\") trasforma una UI live, in esecuzione, in frame Figma modificabili — l'intera schermata, un elemento selezionato o un intero file."}]}, {"kind": "p", "text": "Il Figma MCP gira come server remoto ed è esente dai rate limit. Aggiungilo una volta ed è disponibile per Codex, Claude Code, Cursor, VS Code e altri — esattamente il tipo di capacità portabile e multi-agente che Open Design è costruito per orchestrare."}]}, {"id": "vs", "heading": "Codex vs Cursor vs Claude Code per il design", "blocks": [{"kind": "p", "text": "Non c'è un unico vincitore per il lavoro di design — ogni agente ha un punto di forza diverso e i team esperti li combinano. Un riassunto equo:"}, {"kind": "table", "columns": ["Agente", "Punto di forza nel design", "Ideale per"], "rows": [["Codex", "Forte rifinitura visiva dopo GPT-5.4 + skill frontend; comprensione delle immagini", "Build asincrone delegate, esecuzioni in sandbox, regole AGENTS.md portabili"], ["Cursor", "Ciclo visivo costruisci-e-osserva con anteprima live e modifiche inline", "Lavoro di UI iterativo e a vista all'interno di un IDE"], ["Claude Code", "Decisioni di design specifiche (hex, spaziatura, tipografia) e UX consapevole della codebase", "Ragionamento frontend e refactoring a grande contesto"]]}, {"kind": "p", "text": "Il verdetto ricorrente della community è che il gusto viene dagli esseri umani: tutti e tre, senza skill, riferimenti e vincoli, ripiegano su un'estetica generica. È questo il vero problema da risolvere — ed è di forma da strumento di design, non da modello."}]}, {"id": "pitfalls", "heading": "Insidie, e come evitare l'estetica da \"sbobba dell'IA\"", "blocks": [{"kind": "p", "text": "La lamentela più comune sul design generato da Codex è che appare generico — gradienti soft, pannelli fluttuanti, angoli arrotondati esagerati, ombre drammatiche, un'aria da Inter-e-viola che \"urla che l'ha fatto un'IA\". Altri problemi segnalati includono layout mobile rotti, istruzioni che trapelano nel testo della UI e il raggiungimento rapido dei limiti d'uso."}, {"kind": "steps", "items": [{"label": "Installa una skill frontend", "body": "Una skill estetica curata costringe Codex a impegnarsi su una vera direzione invece del look predefinito."}, {"label": "Abilita la verifica con Playwright", "body": "Fai renderizzare Codex e auto-controllare sui vari breakpoint così i layout non si rompono in silenzio su mobile."}, {"label": "Fornisci tokens e riferimenti", "body": "Tokens di design reali e screenshot di riferimento sono la singola leva più grande sulla qualità dell'output."}, {"label": "Codifica le regole in AGENTS.md", "body": "Metti regole in stile \"niente hero card, al massimo due caratteri, gerarchia brand-first\" dove l'agente le legge a ogni esecuzione."}]}, {"kind": "p", "text": "Nota che ogni mitigazione consiste nel dare all'agente un contesto di design curato. Mantenere quel contesto a mano, progetto per progetto, è la fatica che Open Design elimina."}]}, {"id": "open-design", "heading": "Progettare con Codex dentro Open Design", "blocks": [{"kind": "p", "text": "Open Design è il layer di design open-source che il flusso di lavoro qui sopra continua a richiedere. Tratta Codex come un adattatore di prima parte e lo avvolge in una libreria curata di skill e design system, una pipeline di rendering strutturata e una UI desktop locale — così il contesto di design che rende bravo Codex è presente fin dalla prima esecuzione, non assemblato a mano ogni volta."}, {"kind": "ol", "items": ["Installa Open Design e seleziona Codex come tuo agente.", "Autenticati con la tua chiave API OpenAI (BYOK) o il tuo abbonamento ChatGPT — le credenziali restano sulla tua macchina e non vengono mai instradate tramite noi.", "Scegli un design system e una skill, poi genera deck, prototipi e landing page con un gusto coerente.", "Ogni artefatto e file DESIGN.md vive nella tua repo, non in un cloud ospitato."]}, {"kind": "p", "text": "Stesso agente Codex, stessa chiave — più un vero flusso di lavoro di design portabile e open-source tutt'intorno. È local-first e Apache-2.0, quindi nulla del tuo lavoro o delle tue credenziali lascia la tua macchina."}]}], "faqTitle": "Domande frequenti", "faq": [{"name": "OpenAI Codex può davvero fare lavoro di design?", "text": "Sì — con una skill frontend, un design system e immagini di riferimento reali nel contesto, Codex (specialmente su GPT-5.4) produce UI responsive di qualità da produzione e può verificarla in un browser. Senza quel contesto tende a ripiegare su un look generico, ed è il divario che Open Design colma."}, {"name": "Questo è il plugin Product Design di OpenAI Codex?", "text": "No. Open Design è un progetto open-source indipendente che integra Codex come agente. Completa gli strumenti di OpenAI con una libreria di skill e design system aperta e local-first."}, {"name": "Mi serve un abbonamento ChatGPT per progettare con Codex?", "text": "Puoi usare sia una chiave API OpenAI (BYOK) sia il tuo abbonamento ChatGPT. L'accesso con ChatGPT in genere offre limiti più generosi; in ogni caso Open Design non instrada mai le tue credenziali."}, {"name": "Codex o Claude Code per il design frontend?", "text": "Entrambi sono forti. Claude Code è noto per decisioni di design specifiche e consapevoli della codebase; Codex ha una forte rifinitura visiva dopo GPT-5.4 ed eccelle nelle build delegate e in sandbox. Molti team usano entrambi — Open Design ti permette di cambiare agente senza modificare il tuo flusso di lavoro di design."}, {"name": "Come collego Codex a Figma?", "text": "Aggiungi il server Figma MCP ufficiale (codex mcp add figma --url https://mcp.figma.com/mcp). Potrai poi implementare i frame di Figma in codice con get_design_context e riportare una UI in esecuzione verso frame Figma modificabili con generate_figma_design."}, {"name": "Come evito l'estetica generica da \"sbobba dell'IA\"?", "text": "Installa una skill frontend, fornisci tokens di design reali e screenshot di riferimento, codifica le regole del brand in AGENTS.md e abilita la verifica con Playwright. Open Design li include come libreria curata, così salti la configurazione progetto per progetto."}, {"name": "Open Design è affiliato a OpenAI?", "text": "No. Codex è un prodotto di OpenAI; Open Design è un progetto open-source indipendente che lo supporta come adattatore di prima parte. OpenAI e Codex sono marchi di OpenAI."}, {"name": "I miei file e le mie credenziali sono al sicuro?", "text": "Sì — Open Design è local-first. I tuoi file, gli artefatti e DESIGN.md restano nella tua repo, e le tue credenziali OpenAI vengono usate direttamente dal tuo agente, mai instradate attraverso i server di Open Design."}], "ctaTitle": "Progetta con Codex, in modo aperto.", "ctaBody": "Porta la tua chiave OpenAI, mantieni ogni file in locale e ottieni una libreria di design curata intorno all'agente che già usi.", "ctaActions": [{"label": "Usa Codex dentro Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Metti una stella su GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Scarica l'app desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Vedi tutti gli agenti supportati"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor per i designer — Open Design", + description: "Come i designer usano Cursor per il design di UI e web — Design Mode, da Figma a codice, il Figma MCP — e come Open Design trasforma Cursor in un agente di design open-source e local-first.", + breadcrumb: "Cursor", + label: "Agente · Cursor", + heading: "Cursor per i designer.", + lead: "Cursor è l'editor di codice IA, ora con una Design Mode visiva. I designer lo usano per modificare la UI puntando e disegnando, e per trasformare Figma in codice. Open Design collega Cursor Agent a un flusso di lavoro di design open-source che mantiene i tuoi file in locale.", + rich: {"heroCtaLead": "Open Design trasforma Cursor in un agente di design open-source e local-first — il tuo account Cursor o le tue chiavi di modello, i tuoi file, una libreria curata di skill e design system tutt'intorno.", "heroCtaActions": [{"label": "Usa Cursor dentro Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Metti una stella su GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Scarica l'app desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor è l'editor di codice AI-first che ha reso \"costruiscilo e guardalo renderizzare\" il modo predefinito di rilasciare UI. Con la modalità Agent, le modifiche inline, un'anteprima nell'editor e Figma tramite MCP, è diventato un vero strumento di design — una volta che gli fornisci i riferimenti giusti, le regole e un ciclo di verifica. Questa è una guida pratica ed end-to-end all'uso di Cursor per UI, frontend e design system, e a come integrarlo in un flusso di lavoro di design strutturato con Open Design.", "Copre cos'è realmente Cursor, perché il suo stretto ciclo itera-e-osserva è adatto al design, come configurarlo da zero, il ciclo screenshot-e-anteprima-to-UI, il round-trip con Figma tramite MCP, come si confronta con Codex e Claude Code, le insidie che fanno apparire generico l'output dell'IA e come Open Design colma il divario come layer di design aperto e local-first."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "La convergenza del design con Cursor: l'editor a sinistra, un hub curato di skill e design system al centro con il marchio Cursor al centro, e una UI renderizzata a destra", "caption": "L'idea centrale: Cursor modifica e renderizza la UI nell'editor, mentre un hub di design curato gli fornisce il sistema, le skill e i riferimenti che fanno apparire intenzionale l'output."}, "tocLabel": "In questa pagina", "toc": [{"id": "what-is-cursor", "label": "Cos'è realmente Cursor"}, {"id": "why-design", "label": "Perché Cursor è bravo nel design"}, {"id": "setup", "label": "Configurare Cursor per il design (da zero)"}, {"id": "preview-workflow", "label": "Il flusso di lavoro anteprima-to-UI"}, {"id": "figma", "label": "Cursor + Figma tramite MCP"}, {"id": "vs", "label": "Cursor vs Codex vs Claude Code"}, {"id": "pitfalls", "label": "Insidie e l'estetica da \"sbobba dell'IA\""}, {"id": "open-design", "label": "Progettare con Cursor in Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-cursor", "heading": "Cos'è realmente Cursor", "blocks": [{"kind": "p", "text": "Cursor è un editor di codice AI-first costruito da Anysphere. È un fork di VS Code, quindi conserva l'editor, le estensioni e le scorciatoie da tastiera familiari, ma ricostruisce il flusso di lavoro attorno a un agente IA capace di leggere l'intero progetto, modificare più file, eseguire comandi e iterare con te nel ciclo."}, {"kind": "p", "text": "Per il lavoro di design le superfici importanti sono la modalità Agent (descrivi un risultato e Cursor pianifica e modifica attraverso i file), le modifiche inline e i completamenti Tab per aggiustamenti rapidi, un'anteprima / browser nell'editor così puoi vedere la UI in esecuzione senza lasciare la finestra, e il supporto MCP che gli permette di attingere a contesto esterno come un file Figma live."}, {"kind": "steps", "items": [{"label": "Regole di progetto", "body": "Cursor legge file di istruzioni di progetto — regole `.mdc` versionate sotto `.cursor/rules`, e un semplice `AGENTS.md` — così puoi codificare le tue convenzioni di design dove l'agente le legge a ogni esecuzione."}, {"label": "Modelli", "body": "Cursor è flessibile sui modelli: include modelli di frontiera tramite il tuo abbonamento e supporta anche l'uso delle tue chiavi di modello, così scegli il motore dietro lo stesso flusso di lavoro dell'editor."}, {"label": "MCP", "body": "Parla il Model Context Protocol, così i server esterni — il più rilevante è il server Figma MCP — diventano contesto di prima classe per l'agente."}]}, {"kind": "ul", "items": ["Fornitore: Anysphere", "Credenziale: account / abbonamento Cursor (Hobby / Pro / Business) o le tue chiavi di modello (BYOK)", "Forma: editor di codice AI-first (fork di VS Code) con agente e anteprima nell'editor"]}]}, {"id": "why-design", "heading": "Perché Cursor è bravo nel design", "blocks": [{"kind": "p", "text": "Il vantaggio di Cursor nel design non è una singola funzionalità — è la strettezza del ciclo costruisci-e-osserva. Tre cose lo fanno sembrare uno strumento di design anziché un generatore di codice generico."}, {"kind": "steps", "items": [{"label": "Uno stretto ciclo itera-e-osserva", "body": "Tu dai il prompt, Cursor modifica attraverso i file e l'anteprima nell'editor renderizza il risultato immediatamente — così aggiusti spaziatura, gerarchia e movimento in secondi invece di fare avanti e indietro tra un terminale e un browser separati."}, {"label": "Editing visivo diretto", "body": "Oltre alla chat, Cursor ti permette di selezionare elementi nell'anteprima e ritoccare gli stili, così le piccole correzioni visive sembrano modifiche di design piuttosto che archeologia del codice."}, {"label": "Regole di progetto e contesto MCP", "body": "Con `.cursor/rules` (o `AGENTS.md`) e il server Figma MCP, l'agente lavora rispetto ai tuoi tokens, componenti e specifiche di design reali invece di tirare a indovinare."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Diagramma che mostra design system, skill e immagine di riferimento che convergono in un buon output di design", "caption": "Il gusto nasce da tre input che fornisci tu: un design system, una skill e immagini di riferimento reali."}, {"kind": "p", "text": "La lezione è la stessa che insegna ogni agente: Cursor non ha gusto di default. Produce buon design quando gli dai dei vincoli — un design system, una skill estetica e riferimenti concreti. Open Design impacchetta esattamente quegli input, ed è per questo che i due si combinano bene (più sotto)."}]}, {"id": "setup", "heading": "Configurare Cursor per il lavoro di design, da zero", "blocks": [{"kind": "p", "text": "Ecco il percorso completo, da una macchina pulita a un Cursor in grado di costruire, visualizzare in anteprima e verificare la UI rispetto al tuo design system."}, {"kind": "ol", "items": ["Installa Cursor da cursor.com e accedi con il tuo account Cursor, oppure configura le tue chiavi di modello (BYOK) nelle Impostazioni.", "Apri il tuo progetto e scegli un modello nel pannello chat / Agent.", "Aggiungi regole di progetto: crea `.cursor/rules/*.mdc` per convenzioni strutturate e con ambito glob, oppure un semplice `AGENTS.md` per istruzioni semplici e leggibili.", "Connetti il server Figma MCP (opzionale) così l'agente può leggere il contesto di design live.", "Esegui il tuo dev server e usa l'anteprima nell'editor per vedere e verificare la UI mentre iteri."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Flusso di configurazione in cinque passi: installa, autentica, configura le regole, aggiungi la skill, verifica", "caption": "La sequenza di configurazione: installa → autentica → configura le regole di progetto → aggiungi una skill → abilita la verifica in anteprima."}, {"kind": "p", "text": "Un file di regole di progetto minimale fa progettare l'agente verso un brand invece di ripiegare su un look generico. Mettilo dove Cursor lo legge a ogni esecuzione:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Codifica le tue regole di design", "body": "Inserisci i tuoi tokens, le primitive e le convenzioni in `.cursor/rules` o `AGENTS.md` e indirizza Cursor verso di essi, così l'output rispetta un brand invece di ripiegare su un look generico."}, {"label": "Mantieni i prompt piccoli", "body": "Lo stretto ciclo di Cursor premia le richieste mirate — itera un componente o uno stato alla volta e osserva l'anteprima tra un passaggio e l'altro."}]}]}, {"id": "preview-workflow", "heading": "Il flusso di lavoro anteprima-to-UI", "blocks": [{"kind": "p", "text": "Il ciclo di design a maggior leva con Cursor consiste nel trasformare un riferimento in una UI funzionante e responsive e iterare nell'editor finché non corrisponde — guardando l'anteprima live per tutto il tempo invece di tirare a indovinare."}, {"kind": "ol", "items": ["Parti dai riferimenti visivi più chiari di cui disponi — e includi più stati (desktop e mobile, hover, vuoto, caricamento), non solo un'unica immagine hero.", "Sii specifico nel prompt; prompt vaghi producono UI generiche.", "Prepara un design system e indica a Cursor dove si trovano i tokens e le primitive canoniche.", "Tieni aperta l'anteprima nell'editor e in esecuzione il tuo dev server così ogni modifica renderizza immediatamente ai breakpoint che ti interessano.", "Itera confrontando la UI renderizzata con i riferimenti — e usa la selezione diretta degli elementi nell'anteprima per piccole correzioni visive."]}, {"kind": "p", "text": "Fornisci i riferimenti allegando un'immagine alla chat, poi formula il prompt con vincoli concreti:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Fai commit delle buone iterazioni e revert di quelle cattive (avvisando Cursor quando fai revert) così ogni passaggio si costruisce su una base pulita — la stessa disciplina che impedisce a qualsiasi ciclo di agente di andare alla deriva."}]}, {"id": "figma", "heading": "Cursor + Figma: design ↔ codice tramite MCP", "blocks": [{"kind": "p", "text": "Cursor si connette a Figma attraverso il server Figma MCP ufficiale, che dà all'agente accesso strutturato a un file Figma live invece di uno screenshot piatto. Questo elimina le congetture dall'handoff."}, {"kind": "steps", "items": [{"label": "Design → Codice", "body": "Copia il link di un frame in Figma, incollalo in Cursor e chiedigli di implementare il design. Il server MCP espone contesto di design reale — componenti, variabili, dati di layout, tokens — così il codice generato corrisponde alla sorgente invece di approssimarla."}, {"label": "Resta allineato", "body": "Con tokens di design, stili e componenti usati in modo coerente in Figma (e Code Connect dove disponibile), l'output di Cursor resta mappato sul tuo design system reale anziché reinventare le primitive."}]}, {"kind": "p", "text": "Configura il server Figma MCP remoto una volta ed è disponibile per Cursor come contesto di prima classe. Poiché MCP è uno standard aperto, lo stesso server è riutilizzabile su Cursor, Claude Code, Codex e VS Code — esattamente il tipo di capacità portabile e multi-agente che Open Design è costruito per orchestrare."}]}, {"id": "vs", "heading": "Cursor vs Codex vs Claude Code per il design", "blocks": [{"kind": "p", "text": "Non c'è un unico vincitore per il lavoro di design — ogni agente ha un punto di forza diverso e i team esperti li combinano. Un riassunto equo:"}, {"kind": "table", "columns": ["Agente", "Punto di forza nel design", "Ideale per"], "rows": [["Cursor", "Ciclo visivo costruisci-e-osserva con anteprima live nell'editor e editing diretto degli elementi", "Lavoro di UI iterativo e a vista all'interno di un IDE"], ["Codex", "Forte rifinitura visiva con una skill frontend; comprensione delle immagini ed esecuzioni in sandbox", "Build asincrone delegate e regole AGENTS.md portabili"], ["Claude Code", "Decisioni di design specifiche (hex, spaziatura, tipografia) e UX consapevole della codebase", "Ragionamento frontend e refactoring a grande contesto"]]}, {"kind": "p", "text": "Il verdetto ricorrente della community è che il gusto viene dagli esseri umani: tutti e tre, senza skill, riferimenti e vincoli, ripiegano su un'estetica generica. È questo il vero problema da risolvere — ed è di forma da strumento di design, non da modello."}]}, {"id": "pitfalls", "heading": "Insidie, e come evitare l'estetica da \"sbobba dell'IA\"", "blocks": [{"kind": "p", "text": "La lamentela più comune sul design generato da Cursor è che appare generico — gradienti soft, pannelli fluttuanti, angoli arrotondati esagerati, ombre drammatiche, un'aria da Inter-e-viola che \"urla che l'ha fatto un'IA\". Altri problemi segnalati includono layout che si rompono su mobile e istruzioni che trapelano nel testo della UI."}, {"kind": "steps", "items": [{"label": "Aggiungi una skill di design", "body": "Una skill estetica curata costringe Cursor a impegnarsi su una vera direzione invece del look predefinito."}, {"label": "Usa l'anteprima per verificare", "body": "Renderizza e auto-controlla sui vari breakpoint nell'anteprima nell'editor così i layout non si rompono in silenzio su mobile."}, {"label": "Fornisci tokens e riferimenti", "body": "Tokens di design reali e screenshot di riferimento sono la singola leva più grande sulla qualità dell'output."}, {"label": "Codifica le regole in `.cursor/rules`", "body": "Metti regole in stile \"niente hero card, al massimo due caratteri, gerarchia brand-first\" dove l'agente le legge a ogni esecuzione."}]}, {"kind": "p", "text": "Nota che ogni mitigazione consiste nel dare all'agente un contesto di design curato. Mantenere quel contesto a mano, progetto per progetto, è la fatica che Open Design elimina."}]}, {"id": "open-design", "heading": "Progettare con Cursor dentro Open Design", "blocks": [{"kind": "p", "text": "Open Design è il layer di design open-source che il flusso di lavoro qui sopra continua a richiedere. Tratta Cursor come un adattatore di prima parte e lo avvolge in una libreria curata di skill e design system, una pipeline di rendering strutturata e una UI desktop locale — così il contesto di design che rende bravo Cursor è presente fin dalla prima esecuzione, non assemblato a mano ogni volta."}, {"kind": "ol", "items": ["Installa Open Design e seleziona Cursor come tuo agente.", "Autenticati con il tuo account Cursor o le tue chiavi di modello (BYOK) — le credenziali restano sulla tua macchina e non vengono mai instradate tramite noi.", "Scegli un design system e una skill, poi genera deck, prototipi e landing page con un gusto coerente.", "Ogni artefatto e file DESIGN.md vive nella tua repo, non in un cloud ospitato."]}, {"kind": "p", "text": "Stesso agente Cursor, stessa chiave — più un vero flusso di lavoro di design portabile e open-source tutt'intorno. È local-first e Apache-2.0, quindi nulla del tuo lavoro o delle tue credenziali lascia la tua macchina."}]}], "faqTitle": "Domande frequenti", "faq": [{"name": "Cursor può davvero fare lavoro di design?", "text": "Sì — con una skill di design, un design system e immagini di riferimento reali nel contesto, Cursor produce UI responsive di qualità da produzione, e la sua anteprima nell'editor ti permette di verificarla e rifinirla visivamente. Senza quel contesto tende a ripiegare su un look generico, ed è il divario che Open Design colma."}, {"name": "Questo è un prodotto Cursor ufficiale?", "text": "No. Open Design è un progetto open-source indipendente che integra Cursor come agente. Completa Cursor con una libreria di skill e design system aperta e local-first."}, {"name": "Mi serve un abbonamento Cursor per progettare con Cursor?", "text": "Puoi usare un account / abbonamento Cursor oppure portare le tue chiavi di modello (BYOK). In ogni caso Open Design non instrada mai le tue credenziali — vengono usate direttamente dal tuo agente."}, {"name": "Cursor o Claude Code per il design frontend?", "text": "Entrambi sono forti. Claude Code è noto per decisioni di design specifiche e consapevoli della codebase; il vantaggio di Cursor è il suo stretto ciclo costruisci-e-osserva con un'anteprima live dentro l'editor. Molti team usano entrambi — Open Design ti permette di cambiare agente senza modificare il tuo flusso di lavoro di design."}, {"name": "Come collego Cursor a Figma?", "text": "Aggiungi il server Figma MCP ufficiale in Cursor, poi incolla il link di un frame Figma nella chat e chiedi a Cursor di implementarlo. Il server espone componenti, variabili e dati di layout reali così il codice generato corrisponde al design sorgente."}, {"name": "Come evito l'estetica generica da \"sbobba dell'IA\"?", "text": "Aggiungi una skill di design, fornisci tokens di design reali e screenshot di riferimento, codifica le regole del brand in `.cursor/rules` o `AGENTS.md`, e verifica sui vari breakpoint nell'anteprima. Open Design li include come libreria curata, così salti la configurazione progetto per progetto."}, {"name": "Open Design è affiliato a Cursor o Anysphere?", "text": "No. Cursor è un prodotto di Anysphere; Open Design è un progetto open-source indipendente che lo supporta come adattatore di prima parte. Cursor e Anysphere sono marchi di Anysphere, Inc."}, {"name": "I miei file e le mie credenziali sono al sicuro?", "text": "Sì — Open Design è local-first. I tuoi file, gli artefatti e DESIGN.md restano nella tua repo, e le tue credenziali Cursor o di modello vengono usate direttamente dal tuo agente, mai instradate attraverso i server di Open Design."}], "ctaTitle": "Progetta con Cursor, in modo aperto.", "ctaBody": "Porta il tuo account Cursor o le tue chiavi di modello, mantieni ogni file in locale e ottieni una libreria di design curata intorno all'agente che già usi.", "ctaActions": [{"label": "Usa Cursor dentro Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Metti una stella su GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Scarica l'app desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Vedi tutti gli agenti supportati"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode per il design — Open Design", + description: "Come le persone usano OpenCode per il design di UI e web — file design.md, skill UI/UX, Figma MCP — e come Open Design trasforma OpenCode in un agente di design open-source e local-first.", + breadcrumb: "OpenCode", + label: "Agente · OpenCode", + heading: "OpenCode per il design.", + lead: "OpenCode è l'agente di coding IA da terminale open-source. I designer vi aggiungono skill di design e file DESIGN.md per generare UI reali. Open Design ne fa un flusso di lavoro strutturato e open-source — porta le chiavi dei tuoi provider, mantieni tutto in locale.", + rich: {"heroCtaLead": "Open Design trasforma OpenCode in un agente di design open-source e local-first — qualsiasi modello tu scelga con la tua chiave di provider, i tuoi file, una libreria curata di skill e design system tutt'intorno.", "heroCtaActions": [{"label": "Usa OpenCode dentro Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Metti una stella su GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Scarica l'app desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode è un agente di coding IA open-source e terminal-first deliberatamente agnostico rispetto al modello: porti la tua chiave di provider ed esegui qualunque modello vuoi dietro lo stesso flusso di lavoro. Questa apertura ne fa una base naturale per il lavoro di design — ma, come ogni agente, produce buona UI solo quando gli fornisci i riferimenti giusti, le skill e un ciclo di verifica. Questa è una guida pratica ed end-to-end all'uso di OpenCode per UI, frontend e design system, e a come integrarlo in un flusso di lavoro di design strutturato con Open Design.", "Copre cos'è realmente OpenCode, perché un agente aperto e agnostico rispetto al modello è adatto al design, come configurarlo da zero, il ciclo screenshot-to-UI, come AGENTS.md e MCP lo estendono, come si confronta con Codex, Claude Code e Cursor, le insidie che fanno apparire generico l'output dell'IA e come Open Design colma il divario come layer di design aperto e local-first — un abbinamento naturale, dato che entrambi i progetti sono open-source e girano sulla tua macchina."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "Il ciclo di feedback del design con OpenCode: un agente TUI da terminale, un browser che renderizza la UI e uno spazio di lavoro, con una freccia di feedback che ritorna", "caption": "Il ciclo centrale: OpenCode costruisce la UI nel terminale, la renderizza e la verifica in un browser reale e itera rispetto ai tuoi riferimenti — su qualsiasi modello tu scelga."}, "tocLabel": "In questa pagina", "toc": [{"id": "what-is-opencode", "label": "Cos'è realmente OpenCode"}, {"id": "why-design", "label": "Perché un agente aperto e con qualsiasi modello è adatto al design"}, {"id": "setup", "label": "Configurare OpenCode per il design (da zero)"}, {"id": "screenshot-workflow", "label": "Il flusso di lavoro screenshot-to-UI"}, {"id": "extend", "label": "AGENTS.md, MCP e sessioni condivisibili"}, {"id": "vs", "label": "OpenCode vs Codex vs Claude Code vs Cursor"}, {"id": "pitfalls", "label": "Insidie e l'estetica da \"sbobba dell'IA\""}, {"id": "open-design", "label": "Progettare con OpenCode in Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-opencode", "heading": "Cos'è realmente OpenCode", "blocks": [{"kind": "p", "text": "OpenCode è un agente di coding IA open-source costruito per il terminale, mantenuto dal team dietro SST (Anomaly Innovations). Legge la tua repository, esegue comandi, modifica file e parla con un modello linguistico di grandi dimensioni — ma, a differenza degli agenti legati a un fornitore, non include un proprio modello. Lo punti verso qualunque provider e modello vuoi e porti la tua chiave."}, {"kind": "p", "text": "Gira come UI da terminale (TUI), con un'app desktop ed estensioni IDE sopra lo stesso motore. Sotto il cofano usa un'architettura client/server, così l'agente che fa il lavoro è disaccoppiato dalla superficie da cui lo guidi. Due agenti integrati — build e plan — si alternano con il tasto Tab."}, {"kind": "steps", "items": [{"label": "Agnostico rispetto al modello", "body": "Modelli e provider provengono da models.dev, un catalogo aperto. Li configuri in opencode.json con una stringa provider/model-id e puoi disabilitare i provider che non vuoi caricare — così lo stesso flusso di lavoro di design gira su Anthropic, OpenAI, Google, OpenRouter, modelli locali e altro."}, {"label": "File di istruzioni", "body": "OpenCode legge un file AGENTS.md nel tuo progetto (lo standard cross-tool, compatibile anche con CLAUDE.md) per le regole di progetto — il posto naturale dove codificare le tue convenzioni di design. Esegui /init per generarne uno."}, {"label": "Estendibile", "body": "Supporta l'integrazione LSP, i server MCP, i temi, le scorciatoie da tastiera e i comandi personalizzati, oltre a link di sessione condivisibili per la collaborazione."}]}, {"kind": "ul", "items": ["Manutentore: SST / Anomaly Innovations (progetto open-source)", "Credenziale: la/le tua/e chiave/i API di provider di modello — BYOK, senza vincoli di fornitore", "Licenza: MIT, open source"]}]}, {"id": "why-design", "heading": "Perché un agente aperto e con qualsiasi modello è adatto al lavoro di design", "blocks": [{"kind": "p", "text": "OpenCode non ha un singolo \"modello di design\" come ce l'ha un agente di fornitore — ed è proprio il punto. Poiché è agnostico rispetto al modello e aperto, puoi eseguire lo stesso flusso di lavoro di design su qualsiasi modello sia attualmente il migliore nel frontend, cambiarlo in seguito o ripiegare su un modello locale, tutto senza modificare la tua configurazione."}, {"kind": "p", "text": "Ma la scelta del modello da sola non compra il gusto. Come ogni agente di coding, OpenCode produce UI generiche a meno che non gli dia dei vincoli. Un buon output di design nasce da tre input che fornisci tu."}, {"kind": "steps", "items": [{"label": "Un design system", "body": "Tokens, primitive e convenzioni reali che l'agente riutilizza, così l'output rispetta un brand invece di ripiegare su un look generico."}, {"label": "Una skill estetica", "body": "Una skill curata che impone vero gusto — movimento contenuto, gerarchia brand-first, al massimo due caratteri e un colore d'accento — e fa impegnare l'agente su una direzione prima di costruire."}, {"label": "Riferimenti concreti", "body": "Immagini di riferimento reali e più stati (desktop e mobile, hover, vuoto, caricamento), non una singola immagine hero."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Diagramma che mostra design system, skill e immagine di riferimento che convergono in un buon output di design", "caption": "Il gusto nasce da tre input che fornisci tu: un design system, una skill e immagini di riferimento reali — indipendentemente da quale modello esegui."}, {"kind": "p", "text": "La lezione: OpenCode ti dà libertà di modello, ma il gusto continua a nascere da un contesto di design curato. Open Design impacchetta esattamente quegli input, ed è per questo che i due si combinano bene — entrambi sono open-source e local-first (più sotto)."}]}, {"id": "setup", "heading": "Configurare OpenCode per il lavoro di design, da zero", "blocks": [{"kind": "p", "text": "Ecco il percorso completo, da una macchina pulita a un OpenCode in grado di costruire e verificare la UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Flusso di configurazione in cinque passi: installa, autentica con la tua chiave di provider, configura AGENTS.md, aggiungi una skill, verifica", "caption": "La sequenza di configurazione: installa → autentica (la tua chiave di provider) → configura AGENTS.md → aggiungi una skill → verifica in un browser reale."}, {"kind": "steps", "items": [{"label": "Codifica le tue regole di design", "body": "Inserisci i tuoi tokens, le primitive e le convenzioni in AGENTS.md (o in un DESIGN.md richiamato da esso) così l'output rispetta un brand invece di ripiegare su un look generico. L'opzione instructions in opencode.json può puntare a file di regole aggiuntivi tramite glob."}, {"label": "Scegli un modello capace", "body": "Poiché OpenCode è agnostico rispetto al modello, scegli quale provider/modello sia attualmente il più forte nel frontend per il passaggio di design — e mantieni invariato il resto del tuo flusso di lavoro."}]}]}, {"id": "screenshot-workflow", "heading": "Il flusso di lavoro screenshot-to-UI", "blocks": [{"kind": "p", "text": "Il ciclo di design a maggior leva con qualsiasi agente consiste nel trasformare un'immagine di riferimento in una UI funzionante e responsive e iterare finché non corrisponde. La stessa struttura in cinque passi vale in OpenCode."}, {"kind": "ol", "items": ["Parti dai riferimenti visivi più chiari di cui disponi — e includi più stati (desktop e mobile, hover, vuoto, caricamento), non solo un'unica immagine hero.", "Sii specifico nel prompt; prompt vaghi producono UI generiche.", "Prepara un design system e indica a OpenCode dove si trovano i tokens e le primitive canoniche (in AGENTS.md).", "Esegui un dev server e fai renderizzare l'agente in un browser reale, ridimensionando ai breakpoint per controllare il risultato.", "Itera facendo confrontare a OpenCode la propria implementazione con gli screenshot — non limitarti a confermare che la build funziona."]}, {"kind": "p", "text": "Richiama i file con @ nella TUI per una ricerca fuzzy della tua directory di lavoro, esegui comandi shell inline con un ! iniziale e guida le azioni con i comandi /. Poi formula il prompt con vincoli concreti:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Mantieni i prompt piccoli e mirati, fai commit delle buone iterazioni e revert di quelle cattive (avvisando OpenCode quando fai revert), così ogni passaggio si costruisce su una base pulita."}]}, {"id": "extend", "heading": "AGENTS.md, MCP e sessioni condivisibili", "blocks": [{"kind": "p", "text": "Tre punti di estensione rendono OpenCode pratico per il lavoro di design prolungato, e tutti e tre si mappano in modo pulito su un flusso di lavoro di design aperto."}, {"kind": "steps", "items": [{"label": "Regole AGENTS.md", "body": "Le regole di progetto vivono in un AGENTS.md nella root della repo (o regole globali in ~/.config/opencode/AGENTS.md). È la casa duratura per le tue convenzioni di design, letta a ogni esecuzione, ed è compatibile con i file CLAUDE.md usati da altri agenti."}, {"label": "Server MCP", "body": "OpenCode supporta server MCP sia locali (command) sia remoti (URL), configurati sotto la chiave mcp — il modo portabile per portare contesto di design e strumenti esterni che funzionano su più agenti, non solo OpenCode."}, {"label": "Sessioni condivisibili", "body": "Il comando /share crea un link pubblico a una conversazione per collaborazione o revisione, e /unshare lo revoca — utile per ottenere feedback su un passaggio di design."}]}, {"kind": "p", "text": "Queste sono capacità portabili e multi-agente — esattamente il tipo di cosa che Open Design è costruito per orchestrare, invece di ricrearla progetto per progetto."}]}, {"id": "vs", "heading": "OpenCode vs Codex vs Claude Code vs Cursor per il design", "blocks": [{"kind": "p", "text": "Non c'è un unico vincitore per il lavoro di design — ogni agente ha un punto di forza diverso e i team esperti li combinano. Un riassunto equo:"}, {"kind": "table", "columns": ["Agente", "Punto di forza nel design", "Ideale per"], "rows": [["OpenCode", "Open-source e agnostico rispetto al modello; esegui qualsiasi provider dietro un unico flusso di lavoro da terminale", "Libertà BYOK, cambio di modello, configurazioni completamente aperte e local-first"], ["Codex", "Forte rifinitura visiva con una skill frontend; comprensione delle immagini", "Asincrono delegato, build in sandbox, regole AGENTS.md portabili"], ["Claude Code", "Decisioni di design specifiche (hex, spaziatura, tipografia) e UX consapevole della codebase", "Ragionamento frontend e refactoring a grande contesto"], ["Cursor", "Ciclo visivo costruisci-e-osserva con anteprima live e modifiche inline", "Lavoro di UI iterativo e a vista all'interno di un IDE"]]}, {"kind": "p", "text": "Il verdetto ricorrente della community è che il gusto viene dagli esseri umani: tutti, senza skill, riferimenti e vincoli, ripiegano su un'estetica generica. È questo il vero problema da risolvere — ed è di forma da strumento di design, non da modello, ed è precisamente per questo che un agente aperto come OpenCode si abbina così bene a un layer di design aperto."}]}, {"id": "pitfalls", "heading": "Insidie, e come evitare l'estetica da \"sbobba dell'IA\"", "blocks": [{"kind": "p", "text": "La lamentela più comune sul design generato dall'IA è che appare generico — gradienti soft, pannelli fluttuanti, angoli arrotondati esagerati, ombre drammatiche, un'aria da Inter-e-viola che \"urla che l'ha fatto un'IA\". Altri problemi segnalati includono layout mobile rotti e istruzioni che trapelano nel testo della UI. Nessuno di questi è esclusivo di OpenCode; sono ciò che accade quando qualsiasi agente gira senza un contesto di design curato."}, {"kind": "steps", "items": [{"label": "Aggiungi una skill estetica", "body": "Una skill di design curata costringe l'agente a impegnarsi su una vera direzione invece del look predefinito."}, {"label": "Verifica in un browser reale", "body": "Renderizza e auto-controlla sui vari breakpoint così i layout non si rompono in silenzio su mobile."}, {"label": "Fornisci tokens e riferimenti", "body": "Tokens di design reali e screenshot di riferimento sono la singola leva più grande sulla qualità dell'output."}, {"label": "Codifica le regole in AGENTS.md", "body": "Metti regole in stile \"niente hero card, al massimo due caratteri, gerarchia brand-first\" dove l'agente le legge a ogni esecuzione."}]}, {"kind": "p", "text": "Nota che ogni mitigazione consiste nel dare all'agente un contesto di design curato — indipendentemente da quale modello esegui. Mantenere quel contesto a mano, progetto per progetto, è la fatica che Open Design elimina."}]}, {"id": "open-design", "heading": "Progettare con OpenCode dentro Open Design", "blocks": [{"kind": "p", "text": "Open Design è il layer di design open-source che il flusso di lavoro qui sopra continua a richiedere. Tratta OpenCode come un adattatore di prima parte e lo avvolge in una libreria curata di skill e design system, una pipeline di rendering strutturata e una UI desktop locale — così il contesto di design che rende bravo qualsiasi agente è presente fin dalla prima esecuzione, non assemblato a mano ogni volta. Entrambi i progetti sono open-source e local-first, il che rende l'abbinamento un'unione naturale."}, {"kind": "ol", "items": ["Installa Open Design e seleziona OpenCode come tuo agente.", "Autenticati con la tua chiave API di provider di modello (BYOK) — le credenziali restano sulla tua macchina e non vengono mai instradate tramite noi.", "Scegli qualsiasi provider e modello, più un design system e una skill, poi genera deck, prototipi e landing page con un gusto coerente.", "Ogni artefatto e file DESIGN.md vive nella tua repo, non in un cloud ospitato."]}, {"kind": "p", "text": "Stesso agente OpenCode, stessa libertà di modello — più un vero flusso di lavoro di design portabile e open-source tutt'intorno. È local-first e Apache-2.0, quindi nulla del tuo lavoro o delle tue credenziali lascia la tua macchina."}]}], "faqTitle": "Domande frequenti", "faq": [{"name": "OpenCode può davvero fare lavoro di design?", "text": "Sì — con una skill estetica, un design system e immagini di riferimento reali nel contesto, OpenCode produce UI responsive di qualità da produzione e può verificarla in un browser. Poiché è agnostico rispetto al modello, esegui qualsiasi modello sia attualmente il migliore nel frontend. Senza quel contesto curato tende a ripiegare su un look generico, ed è il divario che Open Design colma."}, {"name": "Quale modello dovrei usare con OpenCode per il design?", "text": "Quello che preferisci — OpenCode è agnostico rispetto al provider tramite models.dev, così puoi eseguire Anthropic, OpenAI, Google, OpenRouter o modelli locali dietro lo stesso flusso di lavoro e cambiarli in qualsiasi momento. La qualità dell'output di design dipende molto più dalla tua skill, dal tuo design system e dai tuoi riferimenti che dal modello da solo."}, {"name": "Open Design è realizzato dal team di OpenCode (SST)?", "text": "No. Open Design è un progetto open-source indipendente che integra OpenCode come agente. Completa OpenCode con una libreria di skill e design system aperta e local-first."}, {"name": "Mi serve un abbonamento speciale per progettare con OpenCode?", "text": "No — OpenCode è BYOK. Porti la tua chiave API di provider di modello, e Open Design non instrada mai le tue credenziali. Non c'è alcun vincolo di fornitore."}, {"name": "OpenCode o Codex o Claude Code per il design frontend?", "text": "Sono tutti forti, e molti team li combinano. Il vantaggio di OpenCode è essere completamente open-source e agnostico rispetto al modello; Codex eccelle nelle build delegate e in sandbox; Claude Code è noto per decisioni di design specifiche e consapevoli della codebase. Open Design ti permette di cambiare agente senza modificare il tuo flusso di lavoro di design."}, {"name": "Come estendo OpenCode per il contesto di design?", "text": "Codifica le regole in AGENTS.md, aggiungi server MCP sotto la chiave mcp per strumenti e contesto di design portabili, e usa le sessioni condivisibili per la revisione. Open Design include una libreria curata di skill e design system, così salti la configurazione progetto per progetto."}, {"name": "Open Design è affiliato a OpenCode o SST?", "text": "No. OpenCode è un progetto open-source mantenuto da SST (Anomaly Innovations); Open Design è un progetto open-source indipendente che lo supporta come adattatore di prima parte."}, {"name": "I miei file e le mie credenziali sono al sicuro?", "text": "Sì — Open Design è local-first. I tuoi file, gli artefatti e DESIGN.md restano nella tua repo, e le tue credenziali di provider di modello vengono usate direttamente dal tuo agente, mai instradate attraverso i server di Open Design."}], "ctaTitle": "Progetta con OpenCode, in modo aperto.", "ctaBody": "Porta la tua chiave di provider di modello, mantieni ogni file in locale e ottieni una libreria di design curata intorno all'agente aperto che già usi.", "ctaActions": [{"label": "Usa OpenCode dentro Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Metti una stella su GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Scarica l'app desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Vedi tutti gli agenti supportati"}, + }, + }, + 'vi': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code cho thiết kế — Open Design", + description: "Cách các nhà thiết kế dùng Claude Code cho thiết kế UI và web, và cách Open Design biến nó thành một agent thiết kế thực thụ — local-first, BYOK, kèm thư viện skill và design-system được tuyển chọn.", + breadcrumb: "Claude Code", + label: "Agent · Claude Code", + heading: "Claude Code cho thiết kế.", + lead: "Claude Code là agent lập trình chạy trên terminal của Anthropic. Người ta đã dùng nó để dựng UI, design system và landing page. Open Design cắm nó vào một quy trình thiết kế thực thụ — mang theo khóa Anthropic hoặc gói đăng ký Claude của bạn, giữ mọi tệp tin ở máy bạn.", + rich: {"heroCtaLead": "Open Design biến Claude Code thành một agent thiết kế local-first, mã nguồn mở — khóa Anthropic hoặc gói đăng ký Claude của bạn, tệp tin của bạn, kèm thư viện skill và design-system được tuyển chọn bao quanh nó.", "heroCtaActions": [{"label": "Dùng Claude Code trong Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Gắn sao trên GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Tải ứng dụng desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code được nhiều người xem là agent lập trình có gu thẩm mỹ frontend tốt nhất — nó lập luận về giao diện với độ cụ thể khác thường, gọi đúng giá trị hex, khoảng cách và type scale, đồng thời tái cấu trúc UI xuyên suốt một codebase lớn mà không lạc mạch. Nhưng ngay khi mới dùng, nó vẫn có xu hướng trôi về một diện mạo chung chung trừ khi bạn trao cho nó một design system, các skill và những tham chiếu thực. Đây là hướng dẫn thực hành, đầu-cuối về cách dùng Claude Code cho công việc UI, frontend và design-system, cũng như cách nối nó vào một quy trình có cấu trúc với Open Design.", "Bài viết bao quát Claude Code thực chất là gì, vì sao nó mạnh ở frontend, cách thiết lập nó từ con số không, quy trình CLAUDE.md và Skills, vòng đi-về Figma chính thức, so sánh với Codex và Cursor, những cạm bẫy khiến đầu ra AI trông chung chung, và cách Open Design lấp khoảng cách đó như một lớp thiết kế mở, local-first."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Vòng phản hồi thiết kế của Claude Code: agent terminal đưa ra các quyết định thiết kế cụ thể, trình duyệt render UI, và một không gian làm việc, với mũi tên phản hồi quay vòng trở lại", "caption": "Vòng lặp cốt lõi: Claude Code lập luận ra các quyết định UI cụ thể trong terminal, render và kiểm chứng chúng trong một trình duyệt thực, rồi hội tụ theo các tham chiếu của bạn."}, "tocLabel": "Trên trang này", "toc": [{"id": "what-is-claude-code", "label": "Claude Code thực chất là gì"}, {"id": "why-design", "label": "Vì sao Claude Code giỏi thiết kế"}, {"id": "setup", "label": "Thiết lập Claude Code cho thiết kế (từ con số không)"}, {"id": "skills-workflow", "label": "Quy trình CLAUDE.md và Skills"}, {"id": "figma", "label": "Vòng đi-về Claude Code + Figma"}, {"id": "vs", "label": "Claude Code so với Codex so với Cursor"}, {"id": "pitfalls", "label": "Cạm bẫy và diện mạo “AI slop”"}, {"id": "open-design", "label": "Thiết kế với Claude Code trong Open Design"}, {"id": "faq", "label": "Câu hỏi thường gặp"}], "sections": [{"id": "what-is-claude-code", "heading": "Claude Code thực chất là gì", "blocks": [{"kind": "p", "text": "Claude Code là công cụ lập trình theo dạng agent của Anthropic. Nó đọc codebase của bạn, chỉnh sửa tệp tin, chạy lệnh và tích hợp với các công cụ phát triển của bạn — lập kế hoạch, viết và kiểm chứng công việc từ các tác vụ bằng ngôn ngữ tự nhiên, thay vì chỉ tự động hoàn thành từng dòng."}, {"kind": "p", "text": "Nó hiện diện trên nhiều bề mặt cùng chung một engine: một CLI trên terminal, các tiện ích mở rộng IDE cho VS Code, Cursor và JetBrains, một ứng dụng desktop có tính năng xem diff trực quan, và một trải nghiệm web cho các tác vụ chạy dài. Các tệp CLAUDE.md, thiết lập và máy chủ MCP của bạn theo cùng bạn trên tất cả chúng."}, {"kind": "steps", "items": [{"label": "Tệp chỉ dẫn", "body": "Claude Code đọc tệp CLAUDE.md ở thư mục gốc dự án vào đầu mỗi phiên — nơi tự nhiên để mã hóa các quy ước thiết kế, tokens và danh mục kiểm tra review của bạn."}, {"label": "Skills", "body": "Agent Skills đóng gói các chỉ dẫn, script và tài nguyên lặp lại được mà Claude nạp theo nhu cầu, bao gồm skill Frontend Design chính thức của Anthropic dành cho gu thẩm mỹ."}, {"label": "Kế hoạch và subagent", "body": "Nó có thể lập kế hoạch trước khi hành động và sinh ra các subagent làm việc song song trên những phần khác nhau của một tác vụ, giúp giữ cho các đợt tái cấu trúc UI lớn được nhất quán."}]}, {"kind": "ul", "items": ["Nhà cung cấp: Anthropic", "Thông tin xác thực: Khóa API Anthropic (BYOK, qua Console) hoặc gói đăng ký Claude (Pro / Max)", "Bề mặt: CLI terminal, tiện ích VS Code / Cursor / JetBrains, ứng dụng desktop, web"]}]}, {"id": "why-design", "heading": "Vì sao Claude Code giỏi thiết kế", "blocks": [{"kind": "p", "text": "Trong số các agent lập trình, Claude Code nổi tiếng về gu thẩm mỹ trong công việc frontend. Có vài điều giải thích cho điều đó."}, {"kind": "steps", "items": [{"label": "Quyết định cụ thể, không mơ hồ", "body": "Claude Code có xu hướng cam kết với những lựa chọn cụ thể — giá trị hex chính xác, các thang khoảng cách, type ramp và phân cấp component — thay vì nói chung chung, và đó chính là điều phân biệt một giao diện thực với một bản giữ chỗ."}, {"label": "Lập luận hiểu codebase", "body": "Với ngữ cảnh làm việc lớn, nó tái cấu trúc UI trên nhiều tệp cùng lúc, tái dùng các component và tokens sẵn có của bạn thay vì sáng chế lại các style dùng một lần."}, {"label": "Một skill frontend chính thức", "body": "Anthropic cung cấp skill Frontend Design khiến Claude viết ra một định hướng thiết kế trước, và chủ động tránh xa các font hệ thống chung chung cùng những gradient tím dễ đoán."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Sơ đồ thể hiện design system, skill và ảnh tham chiếu hội tụ thành đầu ra thiết kế tốt", "caption": "Gu thẩm mỹ đến từ ba đầu vào mà bạn cung cấp: một design system, một skill và những ảnh tham chiếu thực."}, {"kind": "p", "text": "Bài học cũng chính là điều Anthropic nói về các mô hình của họ: Claude không có gu thẩm mỹ mặc định — để mặc kệ, nó hội tụ về trung tâm thống kê của thiết kế web (Inter, gradient tím, đổ bóng mềm). Nó tạo ra thiết kế tốt khi bạn trao cho nó các ràng buộc. Open Design đóng gói đúng những đầu vào ấy, và đó là lý do hai thứ ăn khớp với nhau (chi tiết bên dưới)."}]}, {"id": "setup", "heading": "Thiết lập Claude Code cho công việc thiết kế, từ con số không", "blocks": [{"kind": "p", "text": "Đây là toàn bộ lộ trình từ một máy sạch đến một Claude Code có thể dựng và kiểm chứng UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Quy trình thiết lập năm bước: cài đặt, xác thực, cấu hình CLAUDE.md, thêm skill, kiểm chứng", "caption": "Trình tự thiết lập: cài đặt → xác thực → cấu hình CLAUDE.md → thêm skill Frontend Design → bật kiểm chứng trên trình duyệt."}, {"kind": "steps", "items": [{"label": "Mã hóa các quy tắc thiết kế của bạn", "body": "Đặt tokens, primitive và quy ước của bạn vào CLAUDE.md rồi trỏ Claude tới đó, để đầu ra khớp với một thương hiệu thay vì mặc định về một diện mạo chung chung."}, {"label": "Thêm kiểm chứng trên trình duyệt", "body": "Nối một MCP Playwright hoặc Chrome để Claude render trong trình duyệt thực và kiểm tra đầu ra trên các breakpoint thay vì chỉ xác nhận build thành công."}]}]}, {"id": "skills-workflow", "heading": "Quy trình CLAUDE.md và Skills", "blocks": [{"kind": "p", "text": "Vòng thiết kế đòn bẩy cao nhất với Claude Code là cấp cho nó các tham chiếu thực cộng với ngữ cảnh thiết kế của bạn, rồi lặp đi lặp lại cho đến khi UI khớp — với CLAUDE.md và Skills mang theo các ràng buộc để bạn không phải giải thích lại chúng ở mỗi prompt."}, {"kind": "ol", "items": ["Bắt đầu từ những tham chiếu hình ảnh rõ ràng nhất bạn có — và đưa vào nhiều trạng thái (desktop và mobile, hover, rỗng, đang tải), không chỉ một ảnh hero.", "Hãy cụ thể trong prompt; prompt mơ hồ tạo ra UI chung chung ngay cả với một agent mạnh.", "Giữ design system và các quy ước của bạn trong CLAUDE.md, và cho Claude biết tokens cùng các primitive chuẩn nằm ở đâu.", "Thêm skill Frontend Design để Claude cam kết với một định hướng thẩm mỹ thực sự trước khi viết code.", "Nối kiểm chứng trên trình duyệt để Claude render, đổi kích thước theo breakpoint và đối chiếu lại với các tham chiếu — không chỉ xác nhận nó build được."]}, {"kind": "p", "text": "Thả một ảnh tham chiếu vào phiên và prompt bằng các ràng buộc cụ thể:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Chạy một dev server song song, giữ prompt nhỏ và tập trung, commit các vòng lặp tốt / hoàn tác các vòng tệ (báo cho Claude biết khi bạn hoàn tác) để mỗi lượt dựng trên một nền sạch. Dùng chế độ plan cho các đợt tái cấu trúc lớn hơn để bạn xem xét cách tiếp cận trước khi bất kỳ tệp nào thay đổi."}]}, {"id": "figma", "heading": "Claude Code + Figma: vòng đi-về thiết kế ↔ code", "blocks": [{"kind": "p", "text": "Vào tháng 2 năm 2026, Anthropic và Figma ra mắt một tích hợp hai chiều hạng nhất qua máy chủ Figma MCP. Nó hoạt động theo cả hai chiều."}, {"kind": "steps", "items": [{"label": "Thiết kế → Code", "body": "Chọn một frame trong Figma hoặc dán một liên kết vào Claude Code, kéo ngữ cảnh thiết kế về, và yêu cầu nó hiện thực thiết kế bằng thư viện component sẵn có của bạn. Code Connect giữ cho đầu ra ăn khớp với các component thực của bạn."}, {"label": "Code → Thiết kế", "body": "Dựng và xem trước một tính năng trong trình duyệt, rồi nói “Send this to Figma” để chụp lại UI đang chạy thành các layer Figma chỉnh sửa được — toàn bộ màn hình hoặc một phần tử được chọn."}]}, {"kind": "p", "text": "Cài đặt một lần với claude plugin install figma@claude-plugins-official (Dev Mode MCP yêu cầu gói Figma trả phí). Cùng một Figma MCP có sẵn cho Claude Code, Codex, Cursor và VS Code — đúng kiểu năng lực di động, đa-agent mà Open Design được tạo ra để điều phối."}]}, {"id": "vs", "heading": "Claude Code so với Codex so với Cursor cho thiết kế", "blocks": [{"kind": "p", "text": "Không có người thắng cuộc duy nhất cho công việc thiết kế — mỗi agent có một thế mạnh khác nhau, và các đội ngũ giàu kinh nghiệm xếp chồng chúng. Một bản tóm tắt công bằng:"}, {"kind": "table", "columns": ["Agent", "Thế mạnh thiết kế", "Phù hợp nhất cho"], "rows": [["Claude Code", "Quyết định thiết kế cụ thể (hex, khoảng cách, kiểu chữ) và lập luận UX hiểu codebase", "Lập luận frontend và tái cấu trúc ngữ cảnh lớn"], ["Codex", "Độ tinh chỉnh thị giác mạnh và khả năng hiểu hình ảnh; build bất đồng bộ trong sandbox", "Build bất đồng bộ được ủy thác và quy tắc AGENTS.md di động"], ["Cursor", "Vòng dựng-và-thấy trực quan với xem trước trực tiếp và chỉnh sửa inline", "Công việc UI lặp-và-quan-sát chặt chẽ bên trong một IDE"]]}, {"kind": "p", "text": "Kết luận lặp đi lặp lại của cộng đồng là gu thẩm mỹ đến từ con người: cả ba đều mặc định về một thẩm mỹ chung chung nếu thiếu skill, tham chiếu và ràng buộc. Đó mới là vấn đề thực cần giải — và nó mang hình hài công cụ thiết kế, chứ không phải hình hài mô hình."}]}, {"id": "pitfalls", "heading": "Cạm bẫy, và cách tránh diện mạo “AI slop”", "blocks": [{"kind": "p", "text": "Ngay cả với danh tiếng về gu thẩm mỹ của Claude Code, phàn nàn phổ biến nhất về thiết kế do AI tạo ra là nó trông chung chung — font Inter, gradient tím trên nền trắng, đổ bóng mềm, bo góc quá khổ, một thẩm mỹ “gào lên rằng AI làm cái này.” Chính Anthropic quy điều này cho sự hội tụ phân phối: các lựa chọn an toàn áp đảo dữ liệu huấn luyện web. Những vấn đề khác được báo cáo gồm bố cục mobile vỡ và phần chỉ dẫn rò rỉ vào nội dung UI."}, {"kind": "steps", "items": [{"label": "Cài skill Frontend Design", "body": "Nó buộc Claude cam kết với một định hướng thực và chủ động tránh các font cùng gradient bị AI lạm dụng."}, {"label": "Bật kiểm chứng trên trình duyệt", "body": "Bắt Claude render và tự kiểm tra trên các breakpoint để bố cục không âm thầm vỡ trên mobile."}, {"label": "Cung cấp tokens và tham chiếu", "body": "Tokens thiết kế thực và ảnh chụp tham chiếu là đòn bẩy lớn nhất duy nhất lên chất lượng đầu ra."}, {"label": "Mã hóa quy tắc trong CLAUDE.md", "body": "Đặt những quy tắc kiểu “không thẻ hero, tối đa hai kiểu chữ, phân cấp ưu tiên thương hiệu” ở nơi agent đọc mỗi lần chạy."}]}, {"kind": "p", "text": "Hãy để ý rằng mọi biện pháp giảm thiểu đều xoay quanh việc trao cho agent một ngữ cảnh thiết kế được tuyển chọn. Duy trì ngữ cảnh đó bằng tay, theo từng dự án, chính là sự cực nhọc mà Open Design loại bỏ."}]}, {"id": "open-design", "heading": "Thiết kế với Claude Code bên trong Open Design", "blocks": [{"kind": "p", "text": "Open Design là lớp thiết kế mã nguồn mở mà quy trình ở trên cứ liên tục đòi hỏi. Nó coi Claude Code như một adapter hạng nhất và bao bọc nó trong một thư viện skill và design-system được tuyển chọn, một render pipeline có cấu trúc và một giao diện desktop cục bộ — để ngữ cảnh thiết kế giúp Claude Code trở nên giỏi đã có sẵn ngay từ lần chạy đầu tiên, chứ không phải ghép lại bằng tay mỗi lần."}, {"kind": "ol", "items": ["Cài đặt Open Design và chọn Claude Code làm agent của bạn.", "Xác thực bằng khóa API Anthropic (BYOK) hoặc gói đăng ký Claude của bạn — thông tin xác thực ở lại trên máy bạn và không bao giờ được trung chuyển qua chúng tôi.", "Chọn một design system và một skill, rồi tạo ra deck, prototype và landing page với gu thẩm mỹ nhất quán.", "Mọi sản phẩm và tệp DESIGN.md đều nằm trong repo của riêng bạn, không phải một đám mây được lưu trữ ở nơi khác."]}, {"kind": "p", "text": "Cùng một agent Claude Code, cùng một khóa — cộng thêm một quy trình thiết kế thực, di động, mã nguồn mở bao quanh nó. Nó local-first và Apache-2.0, nên không gì về công việc hay thông tin xác thực của bạn rời khỏi máy bạn."}]}], "faqTitle": "Câu hỏi thường gặp", "faq": [{"name": "Claude Code có tốt cho công việc thiết kế không?", "text": "Có — nó được nhiều người xem là agent lập trình có gu thẩm mỹ frontend tốt nhất, đưa ra các quyết định cụ thể và hiểu codebase về giá trị hex, khoảng cách và type scale. Với skill Frontend Design, một design system và những ảnh tham chiếu thực trong ngữ cảnh, nó tạo ra UI responsive chất lượng sản xuất và có thể kiểm chứng trong trình duyệt. Thiếu ngữ cảnh đó, nó có xu hướng mặc định về một diện mạo chung chung, và đó chính là khoảng cách mà Open Design lấp đầy."}, {"name": "Tôi có cần gói đăng ký Claude để thiết kế với Claude Code không?", "text": "Bạn có thể dùng hoặc khóa API Anthropic (BYOK, qua Console) hoặc gói đăng ký Claude (Pro / Max). Dù theo cách nào, Open Design cũng không bao giờ trung chuyển thông tin xác thực của bạn — chúng được agent của bạn dùng trực tiếp trên máy bạn."}, {"name": "Claude Code hay Codex cho thiết kế frontend?", "text": "Cả hai đều mạnh. Claude Code nổi tiếng với các quyết định thiết kế cụ thể, hiểu codebase và lập luận frontend; Codex có độ tinh chỉnh thị giác mạnh và xuất sắc ở các bản build được ủy thác, chạy trong sandbox. Nhiều đội dùng cả hai — Open Design cho phép bạn đổi agent mà không thay đổi quy trình thiết kế của mình."}, {"name": "Làm sao kết nối Claude Code với Figma?", "text": "Cài plugin Figma chính thức bằng claude plugin install figma@claude-plugins-official. Sau đó bạn có thể hiện thực các frame Figma thành code bằng ngữ cảnh thiết kế, và đẩy một UI đang chạy ngược lại thành các frame Figma chỉnh sửa được với “Send this to Figma.” Dev Mode MCP yêu cầu một gói Figma trả phí."}, {"name": "Skills và CLAUDE.md là gì?", "text": "CLAUDE.md là một tệp markdown ở thư mục gốc dự án mà Claude Code đọc vào đầu mỗi phiên — nơi để mã hóa các quy ước thiết kế của bạn. Skills đóng gói các chỉ dẫn và tài nguyên lặp lại được mà Claude nạp theo nhu cầu, bao gồm skill Frontend Design chính thức của Anthropic. Open Design cung cấp một thư viện tuyển chọn cả hai để bạn bỏ qua phần thiết lập theo từng dự án."}, {"name": "Làm sao tránh thẩm mỹ “AI slop” chung chung?", "text": "Cài skill Frontend Design, cung cấp tokens thiết kế thực và ảnh chụp tham chiếu, mã hóa quy tắc thương hiệu trong CLAUDE.md, và bật kiểm chứng trên trình duyệt. Open Design cung cấp những thứ này dưới dạng một thư viện tuyển chọn để bạn bỏ qua phần thiết lập theo từng dự án."}, {"name": "Open Design có liên kết với Anthropic không?", "text": "Không. Claude Code là sản phẩm của Anthropic; Open Design là một dự án mã nguồn mở độc lập hỗ trợ nó như một adapter hạng nhất. Claude và Claude Code là thương hiệu của Anthropic."}, {"name": "Tệp tin và thông tin xác thực của tôi có an toàn không?", "text": "Có — Open Design là local-first và Apache-2.0. Tệp tin, sản phẩm và DESIGN.md của bạn ở lại trong repo của riêng bạn, còn thông tin xác thực Anthropic của bạn được agent của bạn dùng trực tiếp, không bao giờ định tuyến qua máy chủ Open Design."}], "ctaTitle": "Thiết kế với Claude Code, theo cách mở.", "ctaBody": "Mang theo khóa Anthropic hoặc gói đăng ký Claude của riêng bạn, giữ mọi tệp tin ở máy, và có một thư viện thiết kế được tuyển chọn bao quanh agent bạn đã dùng.", "ctaActions": [{"label": "Dùng Claude Code trong Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Gắn sao trên GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Tải ứng dụng desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Xem tất cả agent được hỗ trợ"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex cho thiết kế — Open Design", + description: "Cách người ta dùng OpenAI Codex cho thiết kế UI và web — plugin Product Design, tích hợp Figma, các skill frontend — và cách Open Design biến Codex thành một agent thiết kế local-first, mã nguồn mở.", + breadcrumb: "Codex", + label: "Agent · Codex", + heading: "Codex cho thiết kế.", + lead: "Codex là agent lập trình của OpenAI. Với plugin Product Design và tích hợp Figma, nó đã trở thành một công cụ thiết kế nghiêm túc. Open Design nối Codex vào một quy trình thiết kế mã nguồn mở — khóa OpenAI hoặc gói đăng ký ChatGPT của bạn, tệp tin của bạn, local-first.", + rich: {"heroCtaLead": "Open Design biến Codex thành một agent thiết kế local-first, mã nguồn mở — khóa OpenAI của bạn, tệp tin của bạn, kèm thư viện skill và design-system được tuyển chọn bao quanh nó.", "heroCtaActions": [{"label": "Dùng Codex trong Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Gắn sao trên GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Tải ứng dụng desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex khởi đầu là một bộ sinh code, nhưng trong năm 2026 nó đã trở thành một công cụ đáng tin cậy để thiết kế các giao diện thực — một khi bạn trao cho nó đúng tham chiếu, skill và vòng kiểm chứng. Đây là hướng dẫn thực hành, đầu-cuối về cách dùng Codex cho công việc UI, frontend và design-system, cũng như cách nối nó vào một quy trình thiết kế có cấu trúc với Open Design.", "Bài viết bao quát Codex hôm nay là gì, vì sao nó đột nhiên giỏi frontend, cách thiết lập nó từ con số không, vòng ảnh-chụp-thành-UI, vòng đi-về Figma chính thức, so sánh với Cursor và Claude Code, những cạm bẫy khiến đầu ra AI trông chung chung, và cách Open Design lấp khoảng cách đó như một lớp thiết kế mở, local-first."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Vòng phản hồi thiết kế của Codex: agent terminal, trình duyệt render UI, và một không gian làm việc, với mũi tên phản hồi quay vòng trở lại", "caption": "Vòng lặp cốt lõi: Codex dựng UI trong terminal, render và kiểm chứng nó trong một trình duyệt thực, rồi lặp lại theo các tham chiếu của bạn."}, "tocLabel": "Trên trang này", "toc": [{"id": "what-is-codex", "label": "OpenAI Codex thực chất là gì"}, {"id": "why-design", "label": "Vì sao Codex giờ đây giỏi thiết kế"}, {"id": "setup", "label": "Thiết lập Codex cho thiết kế (từ con số không)"}, {"id": "screenshot-workflow", "label": "Quy trình ảnh-chụp-thành-UI"}, {"id": "figma", "label": "Vòng đi-về Codex + Figma"}, {"id": "vs", "label": "Codex so với Cursor so với Claude Code"}, {"id": "pitfalls", "label": "Cạm bẫy và diện mạo “AI slop”"}, {"id": "open-design", "label": "Thiết kế với Codex trong Open Design"}, {"id": "faq", "label": "Câu hỏi thường gặp"}], "sections": [{"id": "what-is-codex", "heading": "OpenAI Codex thực chất là gì (và không phải là gì)", "blocks": [{"kind": "p", "text": "Trước hết, một sự phân biệt làm vấp ngã gần như tất cả những ai tìm kiếm “Codex.” OpenAI Codex nguyên gốc là một mô hình hoàn thành code năm 2021 từng vận hành GitHub Copilot thời đầu và bị ngừng hỗ trợ năm 2023. Đó không phải điều trang này nói tới. Codex ngày nay là công cụ lập trình theo dạng agent của OpenAI — nó lập kế hoạch, viết, chạy và kiểm chứng code từ các tác vụ bằng ngôn ngữ tự nhiên."}, {"kind": "p", "text": "Codex hiện đại hiện diện trên bốn bề mặt: một CLI terminal (được viết lại bằng Rust, cấp phép Apache-2.0), một tiện ích IDE cho VS Code, Cursor và Windsurf, một trải nghiệm cloud/web cho các tác vụ bất đồng bộ được ủy thác, và một ứng dụng desktop có trình duyệt trong ứng dụng và Computer Use."}, {"kind": "steps", "items": [{"label": "Mô hình mặc định", "body": "Tính đến giữa năm 2026, mô hình được khuyến nghị là gpt-5.5, với gpt-5.4 là mô hình mà OpenAI huấn luyện rõ ràng cho frontend và computer use."}, {"label": "Tệp chỉ dẫn", "body": "Codex đọc một tệp AGENTS.md trong dự án của bạn (một chuẩn liên-công-cụ) để lấy các quy tắc dự án — nơi tự nhiên để mã hóa các quy ước thiết kế của bạn."}, {"label": "Sandbox", "body": "Nó chạy trong một sandbox ở cấp kernel (mặc định workspace-write), nên một agent đang chỉnh sửa UI của bạn không thể lang thang ra ngoài dự án."}]}, {"kind": "ul", "items": ["Nhà cung cấp: OpenAI", "Thông tin xác thực: Khóa API OpenAI (BYOK) hoặc gói đăng ký ChatGPT (Free / Go / Plus / Pro / Business / Enterprise)", "Giấy phép của CLI: Apache-2.0, mã nguồn mở"]}]}, {"id": "why-design", "heading": "Vì sao Codex giờ đây giỏi thiết kế", "blocks": [{"kind": "p", "text": "Ba điều hội tụ vào đầu năm 2026 khiến Codex trở thành một công cụ thiết kế thực thụ thay vì một bộ sinh code chung chung."}, {"kind": "steps", "items": [{"label": "Một mô hình được huấn luyện cho frontend", "body": "OpenAI ra mắt GPT-5.4, mô hình dòng chính đầu tiên của họ được huấn luyện cho frontend và computer use, với khả năng hiểu hình ảnh tốt hơn nhiều xuyên suốt quy trình thiết kế và tự-kiểm-chứng mạnh hơn. Nó thậm chí có thể tạo mood board và các phương án thị giác trước khi cam kết với tài sản cuối cùng."}, {"label": "Một skill frontend chính thức", "body": "Danh mục openai/skills cung cấp một frontend-skill được tuyển chọn nhằm thực thi gu thẩm mỹ thực: bố cục không thẻ, hero tràn viền, phân cấp ưu tiên thương hiệu, chuyển động tiết chế, tối đa hai kiểu chữ và một màu nhấn — và khiến Codex viết ra một luận đề thị giác trước khi dựng."}, {"label": "Kiểm chứng trên trình duyệt", "body": "Với skill Playwright, Codex mở một trình duyệt thực, đổi kích thước theo breakpoint, và đối chiếu đầu ra của mình với tham chiếu thay vì chỉ kiểm tra rằng build thành công."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Sơ đồ thể hiện design system, skill và ảnh tham chiếu hội tụ thành đầu ra thiết kế tốt", "caption": "Gu thẩm mỹ đến từ ba đầu vào mà bạn cung cấp: một design system, một skill và những ảnh tham chiếu thực."}, {"kind": "p", "text": "Bài học đằng sau cả ba: Codex không có gu thẩm mỹ mặc định. Nó tạo ra thiết kế tốt khi bạn trao cho nó các ràng buộc — một design system, một skill thẩm mỹ và những tham chiếu cụ thể. Open Design đóng gói đúng những đầu vào ấy, và đó là lý do hai thứ ăn khớp với nhau (chi tiết bên dưới)."}]}, {"id": "setup", "heading": "Thiết lập Codex cho công việc thiết kế, từ con số không", "blocks": [{"kind": "p", "text": "Đây là toàn bộ lộ trình từ một máy sạch đến một Codex có thể dựng và kiểm chứng UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Quy trình thiết lập năm bước: cài đặt, xác thực, cấu hình, cài skill, kiểm chứng", "caption": "Trình tự thiết lập: cài đặt → xác thực → cấu hình AGENTS.md → cài skill frontend → bật kiểm chứng trên trình duyệt."}, {"kind": "steps", "items": [{"label": "Mã hóa các quy tắc thiết kế của bạn", "body": "Đặt tokens, primitive và quy ước của bạn vào AGENTS.md hoặc một DESIGN.md rồi trỏ Codex tới đó, để đầu ra khớp với một thương hiệu thay vì mặc định về một diện mạo chung chung."}, {"label": "Chọn đúng mức reasoning", "body": "OpenAI lưu ý rằng các mức reasoning thấp-đến-trung bình thường tạo ra kết quả frontend mạnh hơn so với mức cao nhất."}]}]}, {"id": "screenshot-workflow", "heading": "Quy trình ảnh-chụp-thành-UI", "blocks": [{"kind": "p", "text": "Vòng thiết kế đòn bẩy cao nhất với Codex là biến một ảnh tham chiếu thành UI hoạt động được, responsive và lặp đi lặp lại cho đến khi nó khớp. Chính hướng dẫn của OpenAI cô đọng thành năm bước."}, {"kind": "ol", "items": ["Bắt đầu từ những tham chiếu hình ảnh rõ ràng nhất bạn có — và đưa vào nhiều trạng thái (desktop và mobile, hover, rỗng, đang tải), không chỉ một ảnh hero.", "Hãy cụ thể trong prompt; prompt mơ hồ tạo ra UI chung chung.", "Chuẩn bị một design system và cho Codex biết tokens cùng các primitive chuẩn nằm ở đâu.", "Bật skill tương tác Playwright để Codex render trong một trình duyệt thực và đổi kích thước theo breakpoint.", "Lặp lại bằng cách cho Codex đối chiếu phần hiện thực của nó với các ảnh chụp — không chỉ xác nhận nó build được."]}, {"kind": "p", "text": "Cấp ảnh bằng cách kéo một ảnh chụp vào terminal hoặc bằng cờ image, rồi prompt với các ràng buộc cụ thể:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Chạy một dev server ở terminal thứ hai, giữ prompt nhỏ và tập trung, commit các vòng lặp tốt / hoàn tác các vòng tệ (báo cho Codex biết khi bạn hoàn tác) để mỗi lượt dựng trên một nền sạch."}]}, {"id": "figma", "heading": "Codex + Figma: vòng đi-về thiết kế ↔ code", "blocks": [{"kind": "p", "text": "Vào tháng 2 năm 2026, OpenAI và Figma công bố một quan hệ đối tác chính thức, biến bản beta Figma MCP trước đó thành một tích hợp hai chiều hạng nhất. Nó hoạt động theo cả hai chiều."}, {"kind": "steps", "items": [{"label": "Thiết kế → Code", "body": "Sao chép “link to selection” của một frame trong Figma, dán nó vào Codex với get_design_context, và yêu cầu nó hiện thực thiết kế bằng thư viện component sẵn có của bạn."}, {"label": "Code → Thiết kế", "body": "Công cụ generate_figma_design (“Code to Canvas”) biến một UI sống động, đang chạy ngược lại thành các frame Figma chỉnh sửa được — toàn bộ màn hình, một phần tử được chọn, hoặc cả một tệp."}]}, {"kind": "p", "text": "Figma MCP chạy như một máy chủ từ xa và được miễn khỏi giới hạn tần suất. Thêm nó một lần và nó có sẵn cho Codex, Claude Code, Cursor, VS Code và nhiều hơn nữa — đúng kiểu năng lực di động, đa-agent mà Open Design được tạo ra để điều phối."}]}, {"id": "vs", "heading": "Codex so với Cursor so với Claude Code cho thiết kế", "blocks": [{"kind": "p", "text": "Không có người thắng cuộc duy nhất cho công việc thiết kế — mỗi agent có một thế mạnh khác nhau, và các đội ngũ giàu kinh nghiệm xếp chồng chúng. Một bản tóm tắt công bằng:"}, {"kind": "table", "columns": ["Agent", "Thế mạnh thiết kế", "Phù hợp nhất cho"], "rows": [["Codex", "Độ tinh chỉnh thị giác mạnh sau GPT-5.4 + frontend-skill; khả năng hiểu hình ảnh", "Build bất đồng bộ được ủy thác, chạy trong sandbox, quy tắc AGENTS.md di động"], ["Cursor", "Vòng dựng-và-thấy trực quan với xem trước trực tiếp và chỉnh sửa inline", "Công việc UI lặp-và-quan-sát chặt chẽ bên trong một IDE"], ["Claude Code", "Quyết định thiết kế cụ thể (hex, khoảng cách, kiểu chữ) và UX hiểu codebase", "Lập luận frontend và tái cấu trúc ngữ cảnh lớn"]]}, {"kind": "p", "text": "Kết luận lặp đi lặp lại của cộng đồng là gu thẩm mỹ đến từ con người: cả ba đều mặc định về một thẩm mỹ chung chung nếu thiếu skill, tham chiếu và ràng buộc. Đó mới là vấn đề thực cần giải — và nó mang hình hài công cụ thiết kế, chứ không phải hình hài mô hình."}]}, {"id": "pitfalls", "heading": "Cạm bẫy, và cách tránh diện mạo “AI slop”", "blocks": [{"kind": "p", "text": "Phàn nàn phổ biến nhất về thiết kế do Codex tạo ra là nó trông chung chung — gradient mềm, panel lơ lửng, bo góc quá khổ, đổ bóng kịch tính, một cảm giác Inter-và-tím “gào lên rằng AI làm cái này.” Những vấn đề khác được báo cáo gồm bố cục mobile vỡ, phần chỉ dẫn rò rỉ vào nội dung UI, và chạm giới hạn sử dụng nhanh chóng."}, {"kind": "steps", "items": [{"label": "Cài một skill frontend", "body": "Một skill thẩm mỹ được tuyển chọn buộc Codex cam kết với một định hướng thực thay vì diện mạo mặc định."}, {"label": "Bật kiểm chứng Playwright", "body": "Bắt Codex render và tự kiểm tra trên các breakpoint để bố cục không âm thầm vỡ trên mobile."}, {"label": "Cung cấp tokens và tham chiếu", "body": "Tokens thiết kế thực và ảnh chụp tham chiếu là đòn bẩy lớn nhất duy nhất lên chất lượng đầu ra."}, {"label": "Mã hóa quy tắc trong AGENTS.md", "body": "Đặt những quy tắc kiểu “không thẻ hero, tối đa hai kiểu chữ, phân cấp ưu tiên thương hiệu” ở nơi agent đọc mỗi lần chạy."}]}, {"kind": "p", "text": "Hãy để ý rằng mọi biện pháp giảm thiểu đều xoay quanh việc trao cho agent một ngữ cảnh thiết kế được tuyển chọn. Duy trì ngữ cảnh đó bằng tay, theo từng dự án, chính là sự cực nhọc mà Open Design loại bỏ."}]}, {"id": "open-design", "heading": "Thiết kế với Codex bên trong Open Design", "blocks": [{"kind": "p", "text": "Open Design là lớp thiết kế mã nguồn mở mà quy trình ở trên cứ liên tục đòi hỏi. Nó coi Codex như một adapter hạng nhất và bao bọc nó trong một thư viện skill và design-system được tuyển chọn, một render pipeline có cấu trúc và một giao diện desktop cục bộ — để ngữ cảnh thiết kế giúp Codex trở nên giỏi đã có sẵn ngay từ lần chạy đầu tiên, chứ không phải ghép lại bằng tay mỗi lần."}, {"kind": "ol", "items": ["Cài đặt Open Design và chọn Codex làm agent của bạn.", "Xác thực bằng khóa API OpenAI (BYOK) hoặc gói đăng ký ChatGPT của bạn — thông tin xác thực ở lại trên máy bạn và không bao giờ được trung chuyển qua chúng tôi.", "Chọn một design system và một skill, rồi tạo ra deck, prototype và landing page với gu thẩm mỹ nhất quán.", "Mọi sản phẩm và tệp DESIGN.md đều nằm trong repo của riêng bạn, không phải một đám mây được lưu trữ ở nơi khác."]}, {"kind": "p", "text": "Cùng một agent Codex, cùng một khóa — cộng thêm một quy trình thiết kế thực, di động, mã nguồn mở bao quanh nó. Nó local-first và Apache-2.0, nên không gì về công việc hay thông tin xác thực của bạn rời khỏi máy bạn."}]}], "faqTitle": "Câu hỏi thường gặp", "faq": [{"name": "OpenAI Codex có thực sự làm được công việc thiết kế không?", "text": "Có — với một skill frontend, một design system và những ảnh tham chiếu thực trong ngữ cảnh, Codex (đặc biệt trên GPT-5.4) tạo ra UI responsive chất lượng sản xuất và có thể kiểm chứng trong trình duyệt. Thiếu ngữ cảnh đó, nó có xu hướng mặc định về một diện mạo chung chung, và đó chính là khoảng cách mà Open Design lấp đầy."}, {"name": "Đây có phải plugin Product Design của OpenAI Codex không?", "text": "Không. Open Design là một dự án mã nguồn mở độc lập tích hợp Codex như một agent. Nó bổ sung cho bộ công cụ riêng của OpenAI bằng một thư viện skill và design-system mở, local-first."}, {"name": "Tôi có cần gói đăng ký ChatGPT để thiết kế với Codex không?", "text": "Bạn có thể dùng hoặc khóa API OpenAI (BYOK) hoặc gói đăng ký ChatGPT của bạn. Đăng nhập ChatGPT thường cho giới hạn hào phóng hơn; dù theo cách nào, Open Design cũng không bao giờ trung chuyển thông tin xác thực của bạn."}, {"name": "Codex hay Claude Code cho thiết kế frontend?", "text": "Cả hai đều mạnh. Claude Code nổi tiếng với các quyết định thiết kế cụ thể, hiểu codebase; Codex có độ tinh chỉnh thị giác mạnh sau GPT-5.4 và xuất sắc ở các bản build được ủy thác, chạy trong sandbox. Nhiều đội dùng cả hai — Open Design cho phép bạn đổi agent mà không thay đổi quy trình thiết kế của mình."}, {"name": "Làm sao kết nối Codex với Figma?", "text": "Thêm máy chủ Figma MCP chính thức (codex mcp add figma --url https://mcp.figma.com/mcp). Sau đó bạn có thể hiện thực các frame Figma thành code với get_design_context và đẩy một UI đang chạy ngược lại thành các frame Figma chỉnh sửa được với generate_figma_design."}, {"name": "Làm sao tránh thẩm mỹ “AI slop” chung chung?", "text": "Cài một skill frontend, cung cấp tokens thiết kế thực và ảnh chụp tham chiếu, mã hóa quy tắc thương hiệu trong AGENTS.md, và bật kiểm chứng Playwright. Open Design cung cấp những thứ này dưới dạng một thư viện tuyển chọn để bạn bỏ qua phần thiết lập theo từng dự án."}, {"name": "Open Design có liên kết với OpenAI không?", "text": "Không. Codex là sản phẩm của OpenAI; Open Design là một dự án mã nguồn mở độc lập hỗ trợ nó như một adapter hạng nhất. OpenAI và Codex là thương hiệu của OpenAI."}, {"name": "Tệp tin và thông tin xác thực của tôi có an toàn không?", "text": "Có — Open Design là local-first. Tệp tin, sản phẩm và DESIGN.md của bạn ở lại trong repo của riêng bạn, còn thông tin xác thực OpenAI của bạn được agent của bạn dùng trực tiếp, không bao giờ định tuyến qua máy chủ Open Design."}], "ctaTitle": "Thiết kế với Codex, theo cách mở.", "ctaBody": "Mang theo khóa OpenAI của riêng bạn, giữ mọi tệp tin ở máy, và có một thư viện thiết kế được tuyển chọn bao quanh agent bạn đã dùng.", "ctaActions": [{"label": "Dùng Codex trong Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Gắn sao trên GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Tải ứng dụng desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Xem tất cả agent được hỗ trợ"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor cho nhà thiết kế — Open Design", + description: "Cách các nhà thiết kế dùng Cursor cho thiết kế UI và web — Design Mode, Figma-to-code, Figma MCP — và cách Open Design biến Cursor thành một agent thiết kế local-first, mã nguồn mở.", + breadcrumb: "Cursor", + label: "Agent · Cursor", + heading: "Cursor cho nhà thiết kế.", + lead: "Cursor là trình soạn code AI, giờ đây có Design Mode trực quan. Các nhà thiết kế dùng nó để chỉnh sửa UI bằng cách trỏ và vẽ, và để biến Figma thành code. Open Design cắm Cursor Agent vào một quy trình thiết kế mã nguồn mở giữ tệp tin của bạn ở máy.", + rich: {"heroCtaLead": "Open Design biến Cursor thành một agent thiết kế local-first, mã nguồn mở — tài khoản Cursor hoặc khóa mô hình của bạn, tệp tin của bạn, kèm thư viện skill và design-system được tuyển chọn bao quanh nó.", "heroCtaActions": [{"label": "Dùng Cursor trong Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Gắn sao trên GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Tải ứng dụng desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor là trình soạn code lấy AI làm trọng tâm, đã biến “dựng nó và xem nó render” thành cách mặc định để ship UI. Với chế độ Agent, chỉnh sửa inline, xem trước trong trình soạn và Figma qua MCP, nó đã trở thành một công cụ thiết kế đích thực — một khi bạn trao cho nó đúng tham chiếu, quy tắc và một vòng kiểm chứng. Đây là hướng dẫn thực hành, đầu-cuối về cách dùng Cursor cho công việc UI, frontend và design-system, cũng như cách nối nó vào một quy trình thiết kế có cấu trúc với Open Design.", "Bài viết bao quát Cursor thực chất là gì, vì sao vòng lặp-và-quan-sát chặt chẽ của nó tốt cho thiết kế, cách thiết lập nó từ con số không, vòng ảnh-chụp-và-xem-trước-thành-UI, vòng đi-về Figma qua MCP, so sánh với Codex và Claude Code, những cạm bẫy khiến đầu ra AI trông chung chung, và cách Open Design lấp khoảng cách đó như một lớp thiết kế mở, local-first."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Sự hội tụ thiết kế của Cursor: trình soạn ở bên trái, một hub skill và design-system được tuyển chọn ở giữa với biểu tượng Cursor ở trung tâm, và một UI đã render ở bên phải", "caption": "Ý tưởng cốt lõi: Cursor chỉnh sửa và render UI trong trình soạn, trong khi một hub thiết kế được tuyển chọn cấp cho nó hệ thống, skill và tham chiếu khiến đầu ra trông có chủ đích."}, "tocLabel": "Trên trang này", "toc": [{"id": "what-is-cursor", "label": "Cursor thực chất là gì"}, {"id": "why-design", "label": "Vì sao Cursor giỏi thiết kế"}, {"id": "setup", "label": "Thiết lập Cursor cho thiết kế (từ con số không)"}, {"id": "preview-workflow", "label": "Quy trình xem-trước-thành-UI"}, {"id": "figma", "label": "Cursor + Figma qua MCP"}, {"id": "vs", "label": "Cursor so với Codex so với Claude Code"}, {"id": "pitfalls", "label": "Cạm bẫy và diện mạo “AI slop”"}, {"id": "open-design", "label": "Thiết kế với Cursor trong Open Design"}, {"id": "faq", "label": "Câu hỏi thường gặp"}], "sections": [{"id": "what-is-cursor", "heading": "Cursor thực chất là gì", "blocks": [{"kind": "p", "text": "Cursor là một trình soạn code lấy AI làm trọng tâm do Anysphere xây dựng. Nó là một bản fork của VS Code, nên giữ lại trình soạn, các tiện ích mở rộng và phím tắt quen thuộc, nhưng dựng lại quy trình quanh một agent AI có thể đọc toàn bộ dự án, chỉnh sửa nhiều tệp, chạy lệnh và lặp đi lặp lại cùng bạn trong vòng lặp."}, {"kind": "p", "text": "Với công việc thiết kế, các bề mặt quan trọng là chế độ Agent (bạn mô tả một kết quả và Cursor lập kế hoạch cùng chỉnh sửa xuyên các tệp), chỉnh sửa inline và hoàn thành bằng Tab cho các tinh chỉnh nhanh, một xem trước / trình duyệt trong trình soạn để bạn thấy UI đang chạy mà không rời cửa sổ, và hỗ trợ MCP cho phép nó kéo về ngữ cảnh bên ngoài như một tệp Figma sống động."}, {"kind": "steps", "items": [{"label": "Quy tắc dự án", "body": "Cursor đọc các tệp chỉ dẫn dự án — các quy tắc `.mdc` được phiên bản hóa dưới `.cursor/rules`, và một `AGENTS.md` đơn giản — nên bạn có thể mã hóa các quy ước thiết kế ở nơi agent đọc mỗi lần chạy."}, {"label": "Mô hình", "body": "Cursor linh hoạt về mô hình: nó đi kèm các mô hình tiên phong qua gói đăng ký của bạn và cũng hỗ trợ mang theo khóa mô hình của riêng bạn, nên bạn chọn engine đứng sau cùng một quy trình trình soạn."}, {"label": "MCP", "body": "Nó nói được Model Context Protocol, nên các máy chủ bên ngoài — liên quan nhất là máy chủ Figma MCP — trở thành ngữ cảnh hạng nhất cho agent."}]}, {"kind": "ul", "items": ["Nhà cung cấp: Anysphere", "Thông tin xác thực: Tài khoản / gói đăng ký Cursor (Hobby / Pro / Business) hoặc khóa mô hình của riêng bạn (BYOK)", "Hình thức: Trình soạn code lấy AI làm trọng tâm (bản fork VS Code) với một agent và xem trước trong trình soạn"]}]}, {"id": "why-design", "heading": "Vì sao Cursor giỏi thiết kế", "blocks": [{"kind": "p", "text": "Lợi thế thiết kế của Cursor không phải một tính năng đơn lẻ — đó là độ chặt chẽ của vòng dựng-và-thấy. Ba điều khiến nó cảm giác như một công cụ thiết kế thay vì một bộ sinh code chung chung."}, {"kind": "steps", "items": [{"label": "Một vòng lặp-và-quan-sát chặt chẽ", "body": "Bạn prompt, Cursor chỉnh sửa xuyên các tệp, và xem trước trong trình soạn render kết quả ngay lập tức — nên bạn điều chỉnh khoảng cách, phân cấp và chuyển động trong vài giây thay vì đi-về qua một terminal và trình duyệt riêng."}, {"label": "Chỉnh sửa thị giác trực tiếp", "body": "Ngoài chat, Cursor cho phép bạn chọn phần tử trong xem trước và nhích các style, nên những chỉnh sửa thị giác nhỏ giống như sửa thiết kế hơn là khảo cổ code."}, {"label": "Quy tắc dự án và ngữ cảnh MCP", "body": "Với `.cursor/rules` (hoặc `AGENTS.md`) và máy chủ Figma MCP, agent làm việc dựa trên tokens, component và đặc tả thiết kế thực của bạn thay vì đoán mò."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Sơ đồ thể hiện design system, skill và ảnh tham chiếu hội tụ thành đầu ra thiết kế tốt", "caption": "Gu thẩm mỹ đến từ ba đầu vào mà bạn cung cấp: một design system, một skill và những ảnh tham chiếu thực."}, {"kind": "p", "text": "Bài học cũng chính là điều mọi agent đều dạy: Cursor không có gu thẩm mỹ mặc định. Nó tạo ra thiết kế tốt khi bạn trao cho nó các ràng buộc — một design system, một skill thẩm mỹ và những tham chiếu cụ thể. Open Design đóng gói đúng những đầu vào ấy, và đó là lý do hai thứ ăn khớp với nhau (chi tiết bên dưới)."}]}, {"id": "setup", "heading": "Thiết lập Cursor cho công việc thiết kế, từ con số không", "blocks": [{"kind": "p", "text": "Đây là toàn bộ lộ trình từ một máy sạch đến một Cursor có thể dựng, xem trước và kiểm chứng UI theo design system của bạn."}, {"kind": "ol", "items": ["Cài Cursor từ cursor.com và đăng nhập bằng tài khoản Cursor của bạn, hoặc cấu hình khóa mô hình của riêng bạn (BYOK) trong Settings.", "Mở dự án của bạn và chọn một mô hình trong panel chat / Agent.", "Thêm quy tắc dự án: tạo `.cursor/rules/*.mdc` cho các quy ước có cấu trúc, được giới hạn theo glob, hoặc một `AGENTS.md` đơn giản cho các chỉ dẫn dễ đọc.", "Kết nối máy chủ Figma MCP (tùy chọn) để agent có thể đọc ngữ cảnh thiết kế sống động.", "Chạy dev server của bạn và dùng xem trước trong trình soạn để thấy và kiểm chứng UI khi bạn lặp đi lặp lại."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Quy trình thiết lập năm bước: cài đặt, xác thực, cấu hình quy tắc, thêm skill, kiểm chứng", "caption": "Trình tự thiết lập: cài đặt → xác thực → cấu hình quy tắc dự án → thêm một skill → bật kiểm chứng bằng xem trước."}, {"kind": "p", "text": "Một tệp quy tắc dự án tối giản khiến agent thiết kế theo một thương hiệu thay vì mặc định về một diện mạo chung chung. Đặt nó ở nơi Cursor đọc mỗi lần chạy:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Mã hóa các quy tắc thiết kế của bạn", "body": "Đặt tokens, primitive và quy ước của bạn vào `.cursor/rules` hoặc `AGENTS.md` rồi trỏ Cursor tới đó, để đầu ra khớp với một thương hiệu thay vì mặc định về một diện mạo chung chung."}, {"label": "Giữ prompt nhỏ", "body": "Vòng lặp chặt chẽ của Cursor thưởng cho những yêu cầu tập trung — lặp từng component hoặc trạng thái một và quan sát xem trước giữa các lượt."}]}]}, {"id": "preview-workflow", "heading": "Quy trình xem-trước-thành-UI", "blocks": [{"kind": "p", "text": "Vòng thiết kế đòn bẩy cao nhất với Cursor là biến một tham chiếu thành UI hoạt động được, responsive và lặp đi lặp lại trong trình soạn cho đến khi nó khớp — quan sát xem trước trực tiếp suốt quá trình thay vì đoán mò."}, {"kind": "ol", "items": ["Bắt đầu từ những tham chiếu hình ảnh rõ ràng nhất bạn có — và đưa vào nhiều trạng thái (desktop và mobile, hover, rỗng, đang tải), không chỉ một ảnh hero.", "Hãy cụ thể trong prompt; prompt mơ hồ tạo ra UI chung chung.", "Chuẩn bị một design system và cho Cursor biết tokens cùng các primitive chuẩn nằm ở đâu.", "Giữ xem trước trong trình soạn luôn mở và dev server của bạn luôn chạy để mỗi chỉnh sửa render ngay lập tức ở các breakpoint bạn quan tâm.", "Lặp lại bằng cách đối chiếu UI đã render với các tham chiếu — và dùng chọn phần tử trực tiếp trong xem trước cho các chỉnh sửa thị giác nhỏ."]}, {"kind": "p", "text": "Cấp tham chiếu bằng cách đính một ảnh vào chat, rồi prompt với các ràng buộc cụ thể:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Commit các vòng lặp tốt và hoàn tác các vòng tệ (báo cho Cursor biết khi bạn hoàn tác) để mỗi lượt dựng trên một nền sạch — chính kỷ luật giữ cho bất kỳ vòng lặp agent nào khỏi trôi dạt."}]}, {"id": "figma", "heading": "Cursor + Figma: thiết kế ↔ code qua MCP", "blocks": [{"kind": "p", "text": "Cursor kết nối với Figma qua máy chủ Figma MCP chính thức, thứ cấp cho agent quyền truy cập có cấu trúc vào một tệp Figma sống động thay vì một ảnh chụp phẳng. Điều đó loại bỏ sự đoán mò khỏi quá trình bàn giao."}, {"kind": "steps", "items": [{"label": "Thiết kế → Code", "body": "Sao chép liên kết của một frame trong Figma, dán nó vào Cursor, và yêu cầu nó hiện thực thiết kế. Máy chủ MCP phơi bày ngữ cảnh thiết kế thực — component, biến, dữ liệu bố cục, tokens — nên code sinh ra khớp với nguồn thay vì xấp xỉ nó."}, {"label": "Giữ sự ăn khớp", "body": "Với design tokens, style và component được dùng nhất quán trong Figma (và Code Connect ở nơi có sẵn), đầu ra của Cursor vẫn ánh xạ tới design system thực của bạn thay vì sáng chế lại các primitive."}]}, {"kind": "p", "text": "Thiết lập máy chủ Figma MCP từ xa một lần và nó có sẵn cho Cursor như ngữ cảnh hạng nhất. Vì MCP là một chuẩn mở, cùng một máy chủ có thể tái dùng trên Cursor, Claude Code, Codex và VS Code — đúng kiểu năng lực di động, đa-agent mà Open Design được tạo ra để điều phối."}]}, {"id": "vs", "heading": "Cursor so với Codex so với Claude Code cho thiết kế", "blocks": [{"kind": "p", "text": "Không có người thắng cuộc duy nhất cho công việc thiết kế — mỗi agent có một thế mạnh khác nhau, và các đội ngũ giàu kinh nghiệm xếp chồng chúng. Một bản tóm tắt công bằng:"}, {"kind": "table", "columns": ["Agent", "Thế mạnh thiết kế", "Phù hợp nhất cho"], "rows": [["Cursor", "Vòng dựng-và-thấy trực quan với xem trước trực tiếp trong trình soạn và chỉnh sửa phần tử trực tiếp", "Công việc UI lặp-và-quan-sát chặt chẽ bên trong một IDE"], ["Codex", "Độ tinh chỉnh thị giác mạnh với một skill frontend; khả năng hiểu hình ảnh và chạy trong sandbox", "Build bất đồng bộ được ủy thác và quy tắc AGENTS.md di động"], ["Claude Code", "Quyết định thiết kế cụ thể (hex, khoảng cách, kiểu chữ) và UX hiểu codebase", "Lập luận frontend và tái cấu trúc ngữ cảnh lớn"]]}, {"kind": "p", "text": "Kết luận lặp đi lặp lại của cộng đồng là gu thẩm mỹ đến từ con người: cả ba đều mặc định về một thẩm mỹ chung chung nếu thiếu skill, tham chiếu và ràng buộc. Đó mới là vấn đề thực cần giải — và nó mang hình hài công cụ thiết kế, chứ không phải hình hài mô hình."}]}, {"id": "pitfalls", "heading": "Cạm bẫy, và cách tránh diện mạo “AI slop”", "blocks": [{"kind": "p", "text": "Phàn nàn phổ biến nhất về thiết kế do Cursor tạo ra là nó trông chung chung — gradient mềm, panel lơ lửng, bo góc quá khổ, đổ bóng kịch tính, một cảm giác Inter-và-tím “gào lên rằng AI làm cái này.” Những vấn đề khác được báo cáo gồm bố cục vỡ trên mobile và phần chỉ dẫn rò rỉ vào nội dung UI."}, {"kind": "steps", "items": [{"label": "Thêm một skill thiết kế", "body": "Một skill thẩm mỹ được tuyển chọn buộc Cursor cam kết với một định hướng thực thay vì diện mạo mặc định."}, {"label": "Dùng xem trước để kiểm chứng", "body": "Render và tự kiểm tra trên các breakpoint trong xem trước trong trình soạn để bố cục không âm thầm vỡ trên mobile."}, {"label": "Cung cấp tokens và tham chiếu", "body": "Tokens thiết kế thực và ảnh chụp tham chiếu là đòn bẩy lớn nhất duy nhất lên chất lượng đầu ra."}, {"label": "Mã hóa quy tắc trong `.cursor/rules`", "body": "Đặt những quy tắc kiểu “không thẻ hero, tối đa hai kiểu chữ, phân cấp ưu tiên thương hiệu” ở nơi agent đọc mỗi lần chạy."}]}, {"kind": "p", "text": "Hãy để ý rằng mọi biện pháp giảm thiểu đều xoay quanh việc trao cho agent một ngữ cảnh thiết kế được tuyển chọn. Duy trì ngữ cảnh đó bằng tay, theo từng dự án, chính là sự cực nhọc mà Open Design loại bỏ."}]}, {"id": "open-design", "heading": "Thiết kế với Cursor bên trong Open Design", "blocks": [{"kind": "p", "text": "Open Design là lớp thiết kế mã nguồn mở mà quy trình ở trên cứ liên tục đòi hỏi. Nó coi Cursor như một adapter hạng nhất và bao bọc nó trong một thư viện skill và design-system được tuyển chọn, một render pipeline có cấu trúc và một giao diện desktop cục bộ — để ngữ cảnh thiết kế giúp Cursor trở nên giỏi đã có sẵn ngay từ lần chạy đầu tiên, chứ không phải ghép lại bằng tay mỗi lần."}, {"kind": "ol", "items": ["Cài đặt Open Design và chọn Cursor làm agent của bạn.", "Xác thực bằng tài khoản Cursor hoặc khóa mô hình của riêng bạn (BYOK) — thông tin xác thực ở lại trên máy bạn và không bao giờ được trung chuyển qua chúng tôi.", "Chọn một design system và một skill, rồi tạo ra deck, prototype và landing page với gu thẩm mỹ nhất quán.", "Mọi sản phẩm và tệp DESIGN.md đều nằm trong repo của riêng bạn, không phải một đám mây được lưu trữ ở nơi khác."]}, {"kind": "p", "text": "Cùng một agent Cursor, cùng một khóa — cộng thêm một quy trình thiết kế thực, di động, mã nguồn mở bao quanh nó. Nó local-first và Apache-2.0, nên không gì về công việc hay thông tin xác thực của bạn rời khỏi máy bạn."}]}], "faqTitle": "Câu hỏi thường gặp", "faq": [{"name": "Cursor có thực sự làm được công việc thiết kế không?", "text": "Có — với một skill thiết kế, một design system và những ảnh tham chiếu thực trong ngữ cảnh, Cursor tạo ra UI responsive chất lượng sản xuất, và xem trước trong trình soạn của nó cho phép bạn kiểm chứng và tinh chỉnh nó một cách trực quan. Thiếu ngữ cảnh đó, nó có xu hướng mặc định về một diện mạo chung chung, và đó chính là khoảng cách mà Open Design lấp đầy."}, {"name": "Đây có phải sản phẩm Cursor chính thức không?", "text": "Không. Open Design là một dự án mã nguồn mở độc lập tích hợp Cursor như một agent. Nó bổ sung cho Cursor bằng một thư viện skill và design-system mở, local-first."}, {"name": "Tôi có cần gói đăng ký Cursor để thiết kế với Cursor không?", "text": "Bạn có thể dùng một tài khoản / gói đăng ký Cursor hoặc mang theo khóa mô hình của riêng bạn (BYOK). Dù theo cách nào, Open Design cũng không bao giờ trung chuyển thông tin xác thực của bạn — chúng được agent của bạn dùng trực tiếp."}, {"name": "Cursor hay Claude Code cho thiết kế frontend?", "text": "Cả hai đều mạnh. Claude Code nổi tiếng với các quyết định thiết kế cụ thể, hiểu codebase; lợi thế của Cursor là vòng dựng-và-thấy chặt chẽ với một xem trước trực tiếp bên trong trình soạn. Nhiều đội dùng cả hai — Open Design cho phép bạn đổi agent mà không thay đổi quy trình thiết kế của mình."}, {"name": "Làm sao kết nối Cursor với Figma?", "text": "Thêm máy chủ Figma MCP chính thức trong Cursor, rồi dán một liên kết frame Figma vào chat và yêu cầu Cursor hiện thực nó. Máy chủ phơi bày các component, biến và dữ liệu bố cục thực nên code sinh ra khớp với thiết kế nguồn."}, {"name": "Làm sao tránh thẩm mỹ “AI slop” chung chung?", "text": "Thêm một skill thiết kế, cung cấp tokens thiết kế thực và ảnh chụp tham chiếu, mã hóa quy tắc thương hiệu trong `.cursor/rules` hoặc `AGENTS.md`, và kiểm chứng trên các breakpoint trong xem trước. Open Design cung cấp những thứ này dưới dạng một thư viện tuyển chọn để bạn bỏ qua phần thiết lập theo từng dự án."}, {"name": "Open Design có liên kết với Cursor hay Anysphere không?", "text": "Không. Cursor là sản phẩm của Anysphere; Open Design là một dự án mã nguồn mở độc lập hỗ trợ nó như một adapter hạng nhất. Cursor và Anysphere là thương hiệu của Anysphere, Inc."}, {"name": "Tệp tin và thông tin xác thực của tôi có an toàn không?", "text": "Có — Open Design là local-first. Tệp tin, sản phẩm và DESIGN.md của bạn ở lại trong repo của riêng bạn, còn thông tin xác thực Cursor hoặc mô hình của bạn được agent của bạn dùng trực tiếp, không bao giờ định tuyến qua máy chủ Open Design."}], "ctaTitle": "Thiết kế với Cursor, theo cách mở.", "ctaBody": "Mang theo tài khoản Cursor hoặc khóa mô hình của riêng bạn, giữ mọi tệp tin ở máy, và có một thư viện thiết kế được tuyển chọn bao quanh agent bạn đã dùng.", "ctaActions": [{"label": "Dùng Cursor trong Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Gắn sao trên GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Tải ứng dụng desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Xem tất cả agent được hỗ trợ"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode cho thiết kế — Open Design", + description: "Cách người ta dùng OpenCode cho thiết kế UI và web — tệp design.md, các skill UI/UX, Figma MCP — và cách Open Design biến OpenCode thành một agent thiết kế local-first, mã nguồn mở.", + breadcrumb: "OpenCode", + label: "Agent · OpenCode", + heading: "OpenCode cho thiết kế.", + lead: "OpenCode là agent lập trình AI chạy trên terminal mã nguồn mở. Các nhà thiết kế gắn các skill thiết kế và tệp DESIGN.md lên nó để tạo ra UI thực. Open Design biến điều đó thành một quy trình có cấu trúc, mã nguồn mở — mang theo khóa nhà cung cấp của bạn, giữ mọi thứ ở máy.", + rich: {"heroCtaLead": "Open Design biến OpenCode thành một agent thiết kế local-first, mã nguồn mở — bất kỳ mô hình nào bạn chọn với khóa nhà cung cấp của riêng bạn, tệp tin của bạn, kèm thư viện skill và design-system được tuyển chọn bao quanh nó.", "heroCtaActions": [{"label": "Dùng OpenCode trong Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Gắn sao trên GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Tải ứng dụng desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode là một agent lập trình AI mã nguồn mở, lấy terminal làm trọng tâm, được thiết kế có chủ đích để không phụ thuộc mô hình: bạn mang theo khóa nhà cung cấp của riêng mình và chạy bất kỳ mô hình nào bạn muốn đứng sau cùng một quy trình. Sự cởi mở đó khiến nó là một nền tảng tự nhiên cho công việc thiết kế — nhưng như mọi agent, nó chỉ tạo ra UI tốt khi bạn trao cho nó đúng tham chiếu, skill và một vòng kiểm chứng. Đây là hướng dẫn thực hành, đầu-cuối về cách dùng OpenCode cho công việc UI, frontend và design-system, cũng như cách nối nó vào một quy trình thiết kế có cấu trúc với Open Design.", "Bài viết bao quát OpenCode thực chất là gì, vì sao một agent mở không phụ thuộc mô hình phù hợp với thiết kế, cách thiết lập nó từ con số không, vòng ảnh-chụp-thành-UI, cách AGENTS.md và MCP mở rộng nó, so sánh với Codex, Claude Code và Cursor, những cạm bẫy khiến đầu ra AI trông chung chung, và cách Open Design lấp khoảng cách đó như một lớp thiết kế mở, local-first — một sự ghép đôi tự nhiên, vì cả hai dự án đều mã nguồn mở và chạy trên máy của riêng bạn."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "Vòng phản hồi thiết kế của OpenCode: một agent TUI terminal, một trình duyệt render UI, và một không gian làm việc, với mũi tên phản hồi quay vòng trở lại", "caption": "Vòng lặp cốt lõi: OpenCode dựng UI trong terminal, render và kiểm chứng nó trong một trình duyệt thực, rồi lặp lại theo các tham chiếu của bạn — trên bất kỳ mô hình nào bạn chọn."}, "tocLabel": "Trên trang này", "toc": [{"id": "what-is-opencode", "label": "OpenCode thực chất là gì"}, {"id": "why-design", "label": "Vì sao một agent mở, bất-kỳ-mô-hình hợp với thiết kế"}, {"id": "setup", "label": "Thiết lập OpenCode cho thiết kế (từ con số không)"}, {"id": "screenshot-workflow", "label": "Quy trình ảnh-chụp-thành-UI"}, {"id": "extend", "label": "AGENTS.md, MCP và các phiên chia sẻ được"}, {"id": "vs", "label": "OpenCode so với Codex so với Claude Code so với Cursor"}, {"id": "pitfalls", "label": "Cạm bẫy và diện mạo “AI slop”"}, {"id": "open-design", "label": "Thiết kế với OpenCode trong Open Design"}, {"id": "faq", "label": "Câu hỏi thường gặp"}], "sections": [{"id": "what-is-opencode", "heading": "OpenCode thực chất là gì", "blocks": [{"kind": "p", "text": "OpenCode là một agent lập trình AI mã nguồn mở được xây dựng cho terminal, do đội ngũ đứng sau SST (Anomaly Innovations) duy trì. Nó đọc kho mã của bạn, chạy lệnh, chỉnh sửa tệp và trò chuyện với một mô hình ngôn ngữ lớn — nhưng khác với các agent buộc chặt vào nhà cung cấp, nó không đi kèm mô hình riêng. Bạn trỏ nó tới bất kỳ nhà cung cấp và mô hình nào bạn muốn và mang theo khóa của riêng mình."}, {"kind": "p", "text": "Nó chạy như một giao diện terminal (TUI), với một ứng dụng desktop và các tiện ích IDE đặt trên cùng một engine. Bên dưới, nó dùng kiến trúc client/server, nên agent thực hiện công việc được tách rời khỏi bề mặt mà bạn điều khiển nó. Hai agent dựng sẵn — build và plan — chuyển đổi bằng phím Tab."}, {"kind": "steps", "items": [{"label": "Không phụ thuộc mô hình", "body": "Mô hình và nhà cung cấp đến từ models.dev, một danh mục mở. Bạn cấu hình chúng trong opencode.json bằng một chuỗi provider/model-id và có thể tắt các nhà cung cấp bạn không muốn nạp — nên cùng một quy trình thiết kế chạy trên Anthropic, OpenAI, Google, OpenRouter, các mô hình cục bộ và nhiều hơn nữa."}, {"label": "Tệp chỉ dẫn", "body": "OpenCode đọc một tệp AGENTS.md trong dự án của bạn (chuẩn liên-công-cụ, cũng tương thích với CLAUDE.md) để lấy các quy tắc dự án — nơi tự nhiên để mã hóa các quy ước thiết kế của bạn. Chạy /init để tạo một tệp."}, {"label": "Mở rộng được", "body": "Nó hỗ trợ tích hợp LSP, máy chủ MCP, theme, phím tắt và lệnh tùy chỉnh, cùng các liên kết phiên chia sẻ được cho việc cộng tác."}]}, {"kind": "ul", "items": ["Người duy trì: SST / Anomaly Innovations (dự án mã nguồn mở)", "Thông tin xác thực: (các) khóa API nhà cung cấp mô hình của riêng bạn — BYOK, không khóa chặt vào nhà cung cấp", "Giấy phép: MIT, mã nguồn mở"]}]}, {"id": "why-design", "heading": "Vì sao một agent mở, bất-kỳ-mô-hình hợp với công việc thiết kế", "blocks": [{"kind": "p", "text": "OpenCode không có một “mô hình thiết kế” đơn lẻ như cách một agent gắn nhà cung cấp có — và đó chính là điểm mấu chốt. Vì nó không phụ thuộc mô hình và mở, bạn có thể chạy cùng một quy trình thiết kế trên mô hình nào đang giỏi frontend nhất hiện tại, đổi nó về sau, hoặc lùi về một mô hình cục bộ, tất cả mà không thay đổi thiết lập của bạn."}, {"kind": "p", "text": "Nhưng riêng việc chọn mô hình không mua được gu thẩm mỹ. Như mọi agent lập trình, OpenCode tạo ra UI chung chung trừ khi bạn trao cho nó các ràng buộc. Đầu ra thiết kế tốt đến từ ba đầu vào mà bạn cung cấp."}, {"kind": "steps", "items": [{"label": "Một design system", "body": "Tokens, primitive và quy ước thực mà agent tái dùng, để đầu ra khớp với một thương hiệu thay vì mặc định về một diện mạo chung chung."}, {"label": "Một skill thẩm mỹ", "body": "Một skill được tuyển chọn thực thi gu thẩm mỹ thực — chuyển động tiết chế, phân cấp ưu tiên thương hiệu, tối đa hai kiểu chữ và một màu nhấn — và khiến agent cam kết với một định hướng trước khi dựng."}, {"label": "Tham chiếu cụ thể", "body": "Những ảnh tham chiếu thực và nhiều trạng thái (desktop và mobile, hover, rỗng, đang tải), không chỉ một ảnh hero."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Sơ đồ thể hiện design system, skill và ảnh tham chiếu hội tụ thành đầu ra thiết kế tốt", "caption": "Gu thẩm mỹ đến từ ba đầu vào mà bạn cung cấp: một design system, một skill và những ảnh tham chiếu thực — bất kể bạn chạy mô hình nào."}, {"kind": "p", "text": "Bài học: OpenCode cho bạn tự do về mô hình, nhưng gu thẩm mỹ vẫn đến từ một ngữ cảnh thiết kế được tuyển chọn. Open Design đóng gói đúng những đầu vào ấy, và đó là lý do hai thứ ăn khớp với nhau — cả hai đều mã nguồn mở và local-first (chi tiết bên dưới)."}]}, {"id": "setup", "heading": "Thiết lập OpenCode cho công việc thiết kế, từ con số không", "blocks": [{"kind": "p", "text": "Đây là toàn bộ lộ trình từ một máy sạch đến một OpenCode có thể dựng và kiểm chứng UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Quy trình thiết lập năm bước: cài đặt, xác thực bằng khóa nhà cung cấp của bạn, cấu hình AGENTS.md, thêm một skill, kiểm chứng", "caption": "Trình tự thiết lập: cài đặt → xác thực (khóa nhà cung cấp của bạn) → cấu hình AGENTS.md → thêm một skill → kiểm chứng trong một trình duyệt thực."}, {"kind": "steps", "items": [{"label": "Mã hóa các quy tắc thiết kế của bạn", "body": "Đặt tokens, primitive và quy ước của bạn vào AGENTS.md (hoặc một DESIGN.md được tham chiếu từ đó) để đầu ra khớp với một thương hiệu thay vì mặc định về một diện mạo chung chung. Tùy chọn instructions trong opencode.json có thể trỏ tới các tệp quy tắc bổ sung qua glob."}, {"label": "Chọn một mô hình có năng lực", "body": "Vì OpenCode không phụ thuộc mô hình, hãy chọn provider/model nào đang mạnh nhất ở frontend hiện tại cho lượt thiết kế — và giữ phần còn lại của quy trình không đổi."}]}]}, {"id": "screenshot-workflow", "heading": "Quy trình ảnh-chụp-thành-UI", "blocks": [{"kind": "p", "text": "Vòng thiết kế đòn bẩy cao nhất với bất kỳ agent nào là biến một ảnh tham chiếu thành UI hoạt động được, responsive và lặp đi lặp lại cho đến khi nó khớp. Cùng dạng năm bước ấy áp dụng trong OpenCode."}, {"kind": "ol", "items": ["Bắt đầu từ những tham chiếu hình ảnh rõ ràng nhất bạn có — và đưa vào nhiều trạng thái (desktop và mobile, hover, rỗng, đang tải), không chỉ một ảnh hero.", "Hãy cụ thể trong prompt; prompt mơ hồ tạo ra UI chung chung.", "Chuẩn bị một design system và cho OpenCode biết tokens cùng các primitive chuẩn nằm ở đâu (trong AGENTS.md).", "Chạy một dev server và để agent render trong một trình duyệt thực, đổi kích thước theo breakpoint để kiểm tra kết quả.", "Lặp lại bằng cách cho OpenCode đối chiếu phần hiện thực của nó với các ảnh chụp — không chỉ xác nhận nó build được."]}, {"kind": "p", "text": "Tham chiếu tệp bằng @ trong TUI để tìm kiếm mờ trong thư mục làm việc của bạn, chạy lệnh shell trực tiếp với một dấu ! ở đầu, và điều khiển hành động bằng các lệnh /. Rồi prompt với các ràng buộc cụ thể:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Giữ prompt nhỏ và tập trung, commit các vòng lặp tốt và hoàn tác các vòng tệ (báo cho OpenCode biết khi bạn hoàn tác), để mỗi lượt dựng trên một nền sạch."}]}, {"id": "extend", "heading": "AGENTS.md, MCP và các phiên chia sẻ được", "blocks": [{"kind": "p", "text": "Ba điểm mở rộng khiến OpenCode thực dụng cho công việc thiết kế bền bỉ, và cả ba đều ánh xạ gọn gàng lên một quy trình thiết kế mở."}, {"kind": "steps", "items": [{"label": "Quy tắc AGENTS.md", "body": "Các quy tắc dự án nằm trong một AGENTS.md ở thư mục gốc repo (hoặc các quy tắc toàn cục trong ~/.config/opencode/AGENTS.md). Đó là nơi trú ngụ bền lâu cho các quy ước thiết kế của bạn, được đọc ở mỗi lần chạy, và nó tương thích với các tệp CLAUDE.md mà các agent khác dùng."}, {"label": "Máy chủ MCP", "body": "OpenCode hỗ trợ cả máy chủ MCP cục bộ (command) lẫn từ xa (URL), được cấu hình dưới khóa mcp — cách di động để mang vào ngữ cảnh thiết kế và các công cụ bên ngoài hoạt động xuyên các agent, không chỉ OpenCode."}, {"label": "Các phiên chia sẻ được", "body": "Lệnh /share tạo một liên kết công khai tới một cuộc hội thoại để cộng tác hoặc review, và /unshare thu hồi nó — hữu ích để lấy phản hồi về một lượt thiết kế."}]}, {"kind": "p", "text": "Đây là những năng lực di động, đa-agent — đúng kiểu thứ mà Open Design được tạo ra để điều phối, thay vì tạo lại theo từng dự án."}]}, {"id": "vs", "heading": "OpenCode so với Codex so với Claude Code so với Cursor cho thiết kế", "blocks": [{"kind": "p", "text": "Không có người thắng cuộc duy nhất cho công việc thiết kế — mỗi agent có một thế mạnh khác nhau, và các đội ngũ giàu kinh nghiệm xếp chồng chúng. Một bản tóm tắt công bằng:"}, {"kind": "table", "columns": ["Agent", "Thế mạnh thiết kế", "Phù hợp nhất cho"], "rows": [["OpenCode", "Mã nguồn mở và không phụ thuộc mô hình; chạy bất kỳ nhà cung cấp nào đứng sau một quy trình terminal", "Tự do BYOK, đổi mô hình, các thiết lập hoàn toàn mở và local-first"], ["Codex", "Độ tinh chỉnh thị giác mạnh với một skill frontend; khả năng hiểu hình ảnh", "Bất đồng bộ được ủy thác, build trong sandbox, quy tắc AGENTS.md di động"], ["Claude Code", "Quyết định thiết kế cụ thể (hex, khoảng cách, kiểu chữ) và UX hiểu codebase", "Lập luận frontend và tái cấu trúc ngữ cảnh lớn"], ["Cursor", "Vòng dựng-và-thấy trực quan với xem trước trực tiếp và chỉnh sửa inline", "Công việc UI lặp-và-quan-sát chặt chẽ bên trong một IDE"]]}, {"kind": "p", "text": "Kết luận lặp đi lặp lại của cộng đồng là gu thẩm mỹ đến từ con người: tất cả chúng đều mặc định về một thẩm mỹ chung chung nếu thiếu skill, tham chiếu và ràng buộc. Đó mới là vấn đề thực cần giải — và nó mang hình hài công cụ thiết kế, chứ không phải hình hài mô hình, đó chính là lý do một agent mở như OpenCode ghép đôi rất hợp với một lớp thiết kế mở."}]}, {"id": "pitfalls", "heading": "Cạm bẫy, và cách tránh diện mạo “AI slop”", "blocks": [{"kind": "p", "text": "Phàn nàn phổ biến nhất về thiết kế do AI tạo ra là nó trông chung chung — gradient mềm, panel lơ lửng, bo góc quá khổ, đổ bóng kịch tính, một cảm giác Inter-và-tím “gào lên rằng AI làm cái này.” Những vấn đề khác được báo cáo gồm bố cục mobile vỡ và phần chỉ dẫn rò rỉ vào nội dung UI. Không điều nào trong số này là riêng có ở OpenCode; chúng là điều xảy ra khi bất kỳ agent nào chạy mà không có một ngữ cảnh thiết kế được tuyển chọn."}, {"kind": "steps", "items": [{"label": "Thêm một skill thẩm mỹ", "body": "Một skill thiết kế được tuyển chọn buộc agent cam kết với một định hướng thực thay vì diện mạo mặc định."}, {"label": "Kiểm chứng trong một trình duyệt thực", "body": "Render và tự kiểm tra trên các breakpoint để bố cục không âm thầm vỡ trên mobile."}, {"label": "Cung cấp tokens và tham chiếu", "body": "Tokens thiết kế thực và ảnh chụp tham chiếu là đòn bẩy lớn nhất duy nhất lên chất lượng đầu ra."}, {"label": "Mã hóa quy tắc trong AGENTS.md", "body": "Đặt những quy tắc kiểu “không thẻ hero, tối đa hai kiểu chữ, phân cấp ưu tiên thương hiệu” ở nơi agent đọc mỗi lần chạy."}]}, {"kind": "p", "text": "Hãy để ý rằng mọi biện pháp giảm thiểu đều xoay quanh việc trao cho agent một ngữ cảnh thiết kế được tuyển chọn — bất kể bạn chạy mô hình nào. Duy trì ngữ cảnh đó bằng tay, theo từng dự án, chính là sự cực nhọc mà Open Design loại bỏ."}]}, {"id": "open-design", "heading": "Thiết kế với OpenCode bên trong Open Design", "blocks": [{"kind": "p", "text": "Open Design là lớp thiết kế mã nguồn mở mà quy trình ở trên cứ liên tục đòi hỏi. Nó coi OpenCode như một adapter hạng nhất và bao bọc nó trong một thư viện skill và design-system được tuyển chọn, một render pipeline có cấu trúc và một giao diện desktop cục bộ — để ngữ cảnh thiết kế giúp bất kỳ agent nào trở nên giỏi đã có sẵn ngay từ lần chạy đầu tiên, chứ không phải ghép lại bằng tay mỗi lần. Cả hai dự án đều mã nguồn mở và local-first, điều khiến sự ghép đôi này là một sự phù hợp tự nhiên."}, {"kind": "ol", "items": ["Cài đặt Open Design và chọn OpenCode làm agent của bạn.", "Xác thực bằng khóa API nhà cung cấp mô hình của riêng bạn (BYOK) — thông tin xác thực ở lại trên máy bạn và không bao giờ được trung chuyển qua chúng tôi.", "Chọn bất kỳ nhà cung cấp và mô hình nào, cùng một design system và một skill, rồi tạo ra deck, prototype và landing page với gu thẩm mỹ nhất quán.", "Mọi sản phẩm và tệp DESIGN.md đều nằm trong repo của riêng bạn, không phải một đám mây được lưu trữ ở nơi khác."]}, {"kind": "p", "text": "Cùng một agent OpenCode, cùng một sự tự do về mô hình — cộng thêm một quy trình thiết kế thực, di động, mã nguồn mở bao quanh nó. Nó local-first và Apache-2.0, nên không gì về công việc hay thông tin xác thực của bạn rời khỏi máy bạn."}]}], "faqTitle": "Câu hỏi thường gặp", "faq": [{"name": "OpenCode có thực sự làm được công việc thiết kế không?", "text": "Có — với một skill thẩm mỹ, một design system và những ảnh tham chiếu thực trong ngữ cảnh, OpenCode tạo ra UI responsive chất lượng sản xuất và có thể kiểm chứng trong trình duyệt. Vì nó không phụ thuộc mô hình, bạn chạy mô hình nào đang giỏi frontend nhất hiện tại. Thiếu ngữ cảnh được tuyển chọn đó, nó có xu hướng mặc định về một diện mạo chung chung, và đó chính là khoảng cách mà Open Design lấp đầy."}, {"name": "Tôi nên dùng mô hình nào với OpenCode cho thiết kế?", "text": "Mô hình nào bạn thích — OpenCode không phụ thuộc nhà cung cấp qua models.dev, nên bạn có thể chạy Anthropic, OpenAI, Google, OpenRouter, hoặc các mô hình cục bộ đứng sau cùng một quy trình và đổi bất cứ lúc nào. Chất lượng đầu ra thiết kế phụ thuộc vào skill, design system và tham chiếu của bạn nhiều hơn nhiều so với riêng mô hình."}, {"name": "Open Design có do đội ngũ OpenCode (SST) làm không?", "text": "Không. Open Design là một dự án mã nguồn mở độc lập tích hợp OpenCode như một agent. Nó bổ sung cho OpenCode bằng một thư viện skill và design-system mở, local-first."}, {"name": "Tôi có cần một gói đăng ký đặc biệt để thiết kế với OpenCode không?", "text": "Không — OpenCode là BYOK. Bạn mang theo khóa API nhà cung cấp mô hình của riêng mình, và Open Design không bao giờ trung chuyển thông tin xác thực của bạn. Không có khóa chặt vào nhà cung cấp."}, {"name": "OpenCode hay Codex hay Claude Code cho thiết kế frontend?", "text": "Tất cả đều mạnh, và nhiều đội xếp chồng chúng. Lợi thế của OpenCode là hoàn toàn mã nguồn mở và không phụ thuộc mô hình; Codex xuất sắc ở các bản build được ủy thác, chạy trong sandbox; Claude Code nổi tiếng với các quyết định thiết kế cụ thể, hiểu codebase. Open Design cho phép bạn đổi agent mà không thay đổi quy trình thiết kế của mình."}, {"name": "Làm sao mở rộng OpenCode cho ngữ cảnh thiết kế?", "text": "Mã hóa quy tắc trong AGENTS.md, thêm các máy chủ MCP dưới khóa mcp cho các công cụ di động và ngữ cảnh thiết kế, và dùng các phiên chia sẻ được để review. Open Design cung cấp một thư viện skill và design-system được tuyển chọn để bạn bỏ qua phần thiết lập theo từng dự án."}, {"name": "Open Design có liên kết với OpenCode hay SST không?", "text": "Không. OpenCode là một dự án mã nguồn mở được SST (Anomaly Innovations) duy trì; Open Design là một dự án mã nguồn mở độc lập hỗ trợ nó như một adapter hạng nhất."}, {"name": "Tệp tin và thông tin xác thực của tôi có an toàn không?", "text": "Có — Open Design là local-first. Tệp tin, sản phẩm và DESIGN.md của bạn ở lại trong repo của riêng bạn, còn thông tin xác thực nhà cung cấp mô hình của bạn được agent của bạn dùng trực tiếp, không bao giờ định tuyến qua máy chủ Open Design."}], "ctaTitle": "Thiết kế với OpenCode, theo cách mở.", "ctaBody": "Mang theo khóa nhà cung cấp mô hình của riêng bạn, giữ mọi tệp tin ở máy, và có một thư viện thiết kế được tuyển chọn bao quanh agent mở bạn đã dùng.", "ctaActions": [{"label": "Dùng OpenCode trong Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Gắn sao trên GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Tải ứng dụng desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Xem tất cả agent được hỗ trợ"}, + }, + }, + 'pl': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code dla projektowania — Open Design", + description: "Jak projektanci wykorzystują Claude Code do projektowania UI i stron internetowych oraz jak Open Design zamienia go w prawdziwego agenta projektowego — local-first, BYOK, z wyselekcjonowaną biblioteką skills i systemów projektowych.", + breadcrumb: "Claude Code", + label: "Agent · Claude Code", + heading: "Claude Code dla projektowania.", + lead: "Claude Code to terminalowy agent kodujący od Anthropic. Ludzie już używają go do budowania interfejsów, systemów projektowych i stron docelowych. Open Design wpina go w prawdziwy proces projektowy — przynieś swój klucz Anthropic lub subskrypcję Claude i zachowaj każdy plik lokalnie.", + rich: {"heroCtaLead": "Open Design zamienia Claude Code w local-first, open-source'owego agenta projektowego — twój klucz Anthropic lub subskrypcja Claude, twoje pliki, a wokół nich wyselekcjonowana biblioteka skills i systemów projektowych.", "heroCtaActions": [{"label": "Użyj Claude Code w Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Zostaw gwiazdkę na GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Pobierz aplikację desktopową", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code jest powszechnie uważany za agenta kodującego o najlepszym wyczuciu frontendu — rozumuje o interfejsach z niezwykłą precyzją, podając dokładne wartości hex, odstępy i skale typograficzne, oraz refaktoryzuje UI w dużej bazie kodu, nie gubiąc wątku. Ale prosto z pudełka i tak skłania się ku generycznemu wyglądowi, dopóki nie podasz mu systemu projektowego, skills i prawdziwych referencji. To praktyczny, kompleksowy przewodnik po wykorzystaniu Claude Code do pracy nad UI, frontendem i systemami projektowymi oraz po wpięciu go w ustrukturyzowany proces z Open Design.", "Obejmuje on to, czym właściwie jest Claude Code, dlaczego jest mocny we frontendzie, jak skonfigurować go od zera, proces pracy z CLAUDE.md i Skills, oficjalny obieg dwukierunkowy z Figmą, jak wypada na tle Codeksa i Cursora, pułapki, przez które wynik AI wygląda generycznie, oraz jak Open Design zasypuje tę lukę jako otwarta, local-first warstwa projektowa."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Pętla informacji zwrotnej w projektowaniu z Claude Code: terminalowy agent podejmujący konkretne decyzje projektowe, przeglądarka renderująca UI oraz przestrzeń robocza, ze strzałką sprzężenia zwrotnego zawracającą do początku", "caption": "Główna pętla: Claude Code wyrozumowuje konkretne decyzje dotyczące UI w terminalu, renderuje je i weryfikuje w prawdziwej przeglądarce oraz zbiega się ku twoim referencjom."}, "tocLabel": "Na tej stronie", "toc": [{"id": "what-is-claude-code", "label": "Czym właściwie jest Claude Code"}, {"id": "why-design", "label": "Dlaczego Claude Code jest dobry w projektowaniu"}, {"id": "setup", "label": "Skonfiguruj Claude Code do projektowania (od zera)"}, {"id": "skills-workflow", "label": "Proces pracy z CLAUDE.md i Skills"}, {"id": "figma", "label": "Claude Code + dwukierunkowy obieg z Figmą"}, {"id": "vs", "label": "Claude Code kontra Codex kontra Cursor"}, {"id": "pitfalls", "label": "Pułapki i wygląd „AI slop”"}, {"id": "open-design", "label": "Projektowanie z Claude Code w Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-claude-code", "heading": "Czym właściwie jest Claude Code", "blocks": [{"kind": "p", "text": "Claude Code to agentowe narzędzie do kodowania od Anthropic. Czyta twoją bazę kodu, edytuje pliki, uruchamia polecenia i integruje się z twoimi narzędziami deweloperskimi — planuje, pisze i weryfikuje pracę na podstawie zadań w języku naturalnym, zamiast tylko uzupełniać linijki."}, {"kind": "p", "text": "Dostarczany jest na kilku powierzchniach, które dzielą ten sam silnik: terminalowy CLI, rozszerzenia IDE dla VS Code, Cursora i JetBrains, aplikacja desktopowa z wizualnym przeglądem diffów oraz wersja webowa do długotrwałych zadań. Twoje pliki CLAUDE.md, ustawienia i serwery MCP przenoszą się między nimi wszystkimi."}, {"kind": "steps", "items": [{"label": "Plik instrukcji", "body": "Claude Code czyta plik CLAUDE.md w korzeniu projektu na początku każdej sesji — to naturalne miejsce, by zakodować swoje konwencje projektowe, tokens i listy kontrolne przeglądu."}, {"label": "Skills", "body": "Agent Skills pakują powtarzalne instrukcje, skrypty i zasoby, które Claude ładuje na żądanie, w tym oficjalny skill Frontend Design od Anthropic dla wyczucia smaku."}, {"label": "Plan i podagenci", "body": "Może planować przed działaniem i powoływać podagentów pracujących równolegle nad różnymi częściami zadania, co utrzymuje spójność dużych refaktoryzacji UI."}]}, {"kind": "ul", "items": ["Dostawca: Anthropic", "Poświadczenie: klucz API Anthropic (BYOK, przez Console) lub subskrypcja Claude (Pro / Max)", "Powierzchnie: terminalowy CLI, rozszerzenia VS Code / Cursor / JetBrains, aplikacja desktopowa, web"]}]}, {"id": "why-design", "heading": "Dlaczego Claude Code jest dobry w projektowaniu", "blocks": [{"kind": "p", "text": "Wśród agentów kodujących Claude Code ma reputację narzędzia o wyczuciu smaku w pracy frontendowej. Wyjaśnia to kilka rzeczy."}, {"kind": "steps", "items": [{"label": "Konkretne, a nie mgliste decyzje", "body": "Claude Code zwykle zobowiązuje się do konkretnych wyborów — dokładnych wartości hex, skal odstępów, ramp typograficznych i hierarchii komponentów — zamiast machać ręką, a właśnie to odróżnia prawdziwy interfejs od atrapy."}, {"label": "Rozumowanie świadome bazy kodu", "body": "Dysponując dużym kontekstem roboczym, refaktoryzuje UI w wielu plikach naraz, ponownie wykorzystując twoje istniejące komponenty i tokens zamiast wymyślać jednorazowe style."}, {"label": "Oficjalny skill frontendowy", "body": "Anthropic dostarcza skill Frontend Design, który sprawia, że Claude najpierw spisuje kierunek projektowy i celowo odchodzi od generycznych czcionek systemowych i przewidywalnych fioletowych gradientów."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Diagram pokazujący, jak system projektowy, skill i obraz referencyjny zbiegają się w dobry wynik projektowy", "caption": "Wyczucie smaku bierze się z trzech wkładów, które dostarczasz: systemu projektowego, skilla i prawdziwych obrazów referencyjnych."}, {"kind": "p", "text": "Wniosek jest ten sam, który Anthropic formułuje o własnych modelach: Claude domyślnie nie ma wyczucia smaku — pozostawiony sam sobie zbiega ku statystycznemu środkowi projektowania webowego (Inter, fioletowe gradienty, miękkie cienie). Tworzy dobry projekt, gdy podasz mu ograniczenia. Open Design pakuje dokładnie te wkłady, dlatego te dwie rzeczy do siebie pasują (więcej poniżej)."}]}, {"id": "setup", "heading": "Skonfiguruj Claude Code do pracy projektowej, od zera", "blocks": [{"kind": "p", "text": "Oto pełna ścieżka od czystej maszyny do Claude Code, który potrafi budować i weryfikować UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Pięciokrokowy proces konfiguracji: instalacja, uwierzytelnienie, konfiguracja CLAUDE.md, dodanie skilla, weryfikacja", "caption": "Sekwencja konfiguracji: instalacja → uwierzytelnienie → konfiguracja CLAUDE.md → dodanie skilla Frontend Design → włączenie weryfikacji w przeglądarce."}, {"kind": "steps", "items": [{"label": "Zakoduj swoje reguły projektowe", "body": "Umieść swoje tokens, prymitywy i konwencje w CLAUDE.md i nakieruj na nie Claude'a, aby wynik pasował do marki, zamiast domyślać się generycznego wyglądu."}, {"label": "Dodaj weryfikację w przeglądarce", "body": "Podłącz MCP Playwright lub Chrome, aby Claude renderował w prawdziwej przeglądarce i sprawdzał swój wynik na różnych breakpointach, zamiast tylko potwierdzać, że build przechodzi."}]}]}, {"id": "skills-workflow", "heading": "Proces pracy z CLAUDE.md i Skills", "blocks": [{"kind": "p", "text": "Najbardziej dźwigniową pętlą projektową z Claude Code jest podawanie mu prawdziwych referencji wraz z twoim kontekstem projektowym, a następnie iterowanie, aż UI się zgodzi — przy czym CLAUDE.md i Skills niosą ograniczenia, więc nie musisz tłumaczyć ich od nowa przy każdym poleceniu."}, {"kind": "ol", "items": ["Zacznij od najczytelniejszych referencji wizualnych, jakie masz — i uwzględnij wiele stanów (desktop i mobile, hover, pusty, ładowanie), nie tylko jeden kadr bohaterski.", "Bądź konkretny w poleceniu; mgliste polecenia dają generyczne UI nawet przy silnym agencie.", "Trzymaj swój system projektowy i konwencje w CLAUDE.md i powiedz Claude'owi, gdzie znajdują się tokens i kanoniczne prymitywy.", "Dodaj skill Frontend Design, aby Claude zobowiązał się do prawdziwego kierunku estetycznego, zanim napisze kod.", "Podłącz weryfikację w przeglądarce, aby Claude renderował, zmieniał rozmiar do breakpointów i porównywał z referencjami — a nie tylko potwierdzał, że się buduje."]}, {"kind": "p", "text": "Wrzuć obraz referencyjny do sesji i daj polecenie z konkretnymi ograniczeniami:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Uruchom obok serwer deweloperski, trzymaj polecenia krótkie i skupione oraz commituj dobre iteracje / cofaj złe (mówiąc Claude'owi, kiedy cofasz), aby każde przejście budowało na czystej bazie. Używaj trybu planu do większych refaktoryzacji, abyś mógł przejrzeć podejście przed jakąkolwiek zmianą plików."}]}, {"id": "figma", "heading": "Claude Code + Figma: dwukierunkowy obieg projekt ↔ kod", "blocks": [{"kind": "p", "text": "W lutym 2026 Anthropic i Figma dostarczyły pierwszorzędną, dwukierunkową integrację za pośrednictwem serwera Figma MCP. Działa w obie strony."}, {"kind": "steps", "items": [{"label": "Projekt → Kod", "body": "Zaznacz ramkę w Figmie lub wklej link do Claude Code, pobierz kontekst projektowy i poproś go o implementację projektu z użyciem twojej istniejącej biblioteki komponentów. Code Connect utrzymuje wynik zgodny z twoimi rzeczywistymi komponentami."}, {"label": "Kod → Projekt", "body": "Zbuduj i podejrzyj funkcję w przeglądarce, a następnie powiedz „Send this to Figma”, aby uchwycić działające UI jako edytowalne warstwy Figmy — cały ekran lub wybrany element."}]}, {"kind": "p", "text": "Zainstaluj go raz poleceniem claude plugin install figma@claude-plugins-official (Dev Mode MCP wymaga płatnego planu Figma). Ten sam Figma MCP jest dostępny dla Claude Code, Codeksa, Cursora i VS Code — dokładnie ten rodzaj przenośnej, wieloagentowej możliwości, do orkiestracji której zbudowany jest Open Design."}]}, {"id": "vs", "heading": "Claude Code kontra Codex kontra Cursor w projektowaniu", "blocks": [{"kind": "p", "text": "Nie ma jednego zwycięzcy w pracy projektowej — każdy agent ma inną mocną stronę, a doświadczone zespoły zestawiają je ze sobą. Uczciwe podsumowanie:"}, {"kind": "table", "columns": ["Agent", "Mocna strona projektowa", "Najlepszy do"], "rows": [["Claude Code", "Konkretne decyzje projektowe (hex, odstępy, typografia) i rozumowanie UX świadome bazy kodu", "Rozumowanie frontendowe i refaktoryzacje w dużym kontekście"], ["Codex", "Mocne dopracowanie wizualne i rozumienie obrazów; asynchroniczne buildy w sandboksie", "Delegowane asynchroniczne buildy i przenośne reguły AGENTS.md"], ["Cursor", "Wizualna pętla buduj-i-zobacz z podglądem na żywo i edycjami inline", "Ciasna praca nad UI w trybie iteruj-i-obserwuj wewnątrz IDE"]]}, {"kind": "p", "text": "Powracający werdykt społeczności jest taki, że wyczucie smaku pochodzi od ludzi: cała trójka domyślnie zbiega ku generycznej estetyce bez skills, referencji i ograniczeń. To jest prawdziwy problem do rozwiązania — i ma on kształt narzędzia projektowego, a nie modelu."}]}, {"id": "pitfalls", "heading": "Pułapki i jak unikać wyglądu „AI slop”", "blocks": [{"kind": "p", "text": "Nawet przy reputacji Claude Code za wyczucie smaku najczęstszą skargą na projekty generowane przez AI jest to, że wyglądają generycznie — czcionki Inter, fioletowe gradienty na bieli, miękkie cienie, przeskalowane zaokrąglone rogi, estetyka, która „krzyczy, że zrobiło to AI”. Sam Anthropic przypisuje to zbieżności rozkładowej: bezpieczne wybory dominują w danych treningowych z sieci. Inne zgłaszane problemy to popsute układy mobilne i przeciekanie instrukcji do treści UI."}, {"kind": "steps", "items": [{"label": "Zainstaluj skill Frontend Design", "body": "Zmusza Claude'a do zobowiązania się do prawdziwego kierunku i wyraźnie unika czcionek oraz gradientów nadużywanych przez AI."}, {"label": "Włącz weryfikację w przeglądarce", "body": "Spraw, aby Claude renderował i sam się sprawdzał na różnych breakpointach, tak by układy nie psuły się po cichu na mobile."}, {"label": "Dostarcz tokens i referencje", "body": "Prawdziwe design tokens i zrzuty ekranu referencji to pojedyncza największa dźwignia jakości wyniku."}, {"label": "Zakoduj reguły w CLAUDE.md", "body": "Umieść reguły w stylu „bez kart bohaterskich, najwyżej dwa kroje pisma, hierarchia stawiająca markę na pierwszym miejscu” tam, gdzie agent czyta je przy każdym uruchomieniu."}]}, {"kind": "p", "text": "Zauważ, że każde z tych zabezpieczeń polega na daniu agentowi wyselekcjonowanego kontekstu projektowego. Ręczne utrzymywanie tego kontekstu, projekt po projekcie, to mozół, który usuwa Open Design."}]}, {"id": "open-design", "heading": "Projektowanie z Claude Code wewnątrz Open Design", "blocks": [{"kind": "p", "text": "Open Design to open-source'owa warstwa projektowa, o którą powyższy proces wciąż się dopomina. Traktuje Claude Code jako adapter pierwszej kategorii i otacza go wyselekcjonowaną biblioteką skills i systemów projektowych, ustrukturyzowanym potokiem renderowania oraz lokalnym desktopowym UI — więc kontekst projektowy, który czyni Claude Code dobrym, jest dostępny od pierwszego uruchomienia, a nie składany ręcznie za każdym razem."}, {"kind": "ol", "items": ["Zainstaluj Open Design i wybierz Claude Code jako swojego agenta.", "Uwierzytelnij się swoim kluczem API Anthropic (BYOK) lub subskrypcją Claude — poświadczenia pozostają na twojej maszynie i nigdy nie są przekierowywane przez nas.", "Wybierz system projektowy i skill, a następnie generuj prezentacje, prototypy i strony docelowe ze spójnym wyczuciem smaku.", "Każdy artefakt i plik DESIGN.md żyje w twoim własnym repozytorium, a nie w hostowanej chmurze."]}, {"kind": "p", "text": "Ten sam agent Claude Code, ten sam klucz — plus prawdziwy, przenośny, open-source'owy proces projektowy wokół niego. Jest local-first i na licencji Apache-2.0, więc nic z twojej pracy ani twoich poświadczeń nie opuszcza twojej maszyny."}]}], "faqTitle": "Najczęściej zadawane pytania", "faq": [{"name": "Czy Claude Code nadaje się do pracy projektowej?", "text": "Tak — jest powszechnie uważany za agenta kodującego o najlepszym wyczuciu frontendu, podejmującego konkretne, świadome bazy kodu decyzje dotyczące wartości hex, odstępów i skal typograficznych. Mając w kontekście skill Frontend Design, system projektowy i prawdziwe obrazy referencyjne, tworzy responsywne UI o jakości produkcyjnej i potrafi je zweryfikować w przeglądarce. Bez tego kontekstu skłania się ku generycznemu wyglądowi, i to jest luka, którą wypełnia Open Design."}, {"name": "Czy potrzebuję subskrypcji Claude, aby projektować z Claude Code?", "text": "Możesz użyć albo klucza API Anthropic (BYOK, przez Console), albo subskrypcji Claude (Pro / Max). Tak czy inaczej Open Design nigdy nie przekierowuje twoich poświadczeń — są one używane bezpośrednio przez twojego agenta na twojej maszynie."}, {"name": "Claude Code czy Codex do projektowania frontendu?", "text": "Oba są mocne. Claude Code jest znany z konkretnych, świadomych bazy kodu decyzji projektowych i rozumowania frontendowego; Codex ma mocne dopracowanie wizualne i wyróżnia się w delegowanych buildach w sandboksie. Wiele zespołów używa obu — Open Design pozwala przełączać agentów bez zmiany twojego procesu projektowego."}, {"name": "Jak połączyć Claude Code z Figmą?", "text": "Zainstaluj oficjalny plugin Figma poleceniem claude plugin install figma@claude-plugins-official. Następnie możesz implementować ramki Figmy w kodzie z użyciem kontekstu projektowego oraz wypchnąć działające UI z powrotem do edytowalnych ramek Figmy za pomocą „Send this to Figma”. Dev Mode MCP wymaga płatnego planu Figma."}, {"name": "Czym są Skills i CLAUDE.md?", "text": "CLAUDE.md to plik markdown w korzeniu projektu, który Claude Code czyta na początku każdej sesji — miejsce na zakodowanie twoich konwencji projektowych. Skills pakują powtarzalne instrukcje i zasoby, które Claude ładuje na żądanie, w tym oficjalny skill Frontend Design od Anthropic. Open Design dostarcza wyselekcjonowaną bibliotekę obu, więc omijasz konfigurację dla każdego projektu z osobna."}, {"name": "Jak uniknąć generycznej estetyki „AI slop”?", "text": "Zainstaluj skill Frontend Design, dostarcz prawdziwe design tokens i zrzuty ekranu referencji, zakoduj reguły marki w CLAUDE.md oraz włącz weryfikację w przeglądarce. Open Design dostarcza je jako wyselekcjonowaną bibliotekę, więc omijasz konfigurację dla każdego projektu z osobna."}, {"name": "Czy Open Design jest powiązany z Anthropic?", "text": "Nie. Claude Code jest produktem Anthropic; Open Design to niezależny projekt open-source, który wspiera go jako adapter pierwszej kategorii. Claude i Claude Code są znakami towarowymi Anthropic."}, {"name": "Czy moje pliki i poświadczenia są bezpieczne?", "text": "Tak — Open Design jest local-first i na licencji Apache-2.0. Twoje pliki, artefakty i DESIGN.md pozostają w twoim własnym repozytorium, a twoje poświadczenia Anthropic są używane bezpośrednio przez twojego agenta, nigdy nie są przekierowywane przez serwery Open Design."}], "ctaTitle": "Projektuj z Claude Code, w otwarty sposób.", "ctaBody": "Przynieś własny klucz Anthropic lub subskrypcję Claude, zachowaj każdy plik lokalnie i zyskaj wyselekcjonowaną bibliotekę projektową wokół agenta, którego już używasz.", "ctaActions": [{"label": "Użyj Claude Code w Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Zostaw gwiazdkę na GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Pobierz aplikację desktopową", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Zobacz wszystkich obsługiwanych agentów"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex dla projektowania — Open Design", + description: "Jak ludzie wykorzystują OpenAI Codex do projektowania UI i stron internetowych — plugin Product Design, integracja z Figmą, skills frontendowe — i jak Open Design zamienia Codeksa w local-first, open-source'owego agenta projektowego.", + breadcrumb: "Codex", + label: "Agent · Codex", + heading: "Codex dla projektowania.", + lead: "Codex to agent kodujący od OpenAI. Dzięki swojemu pluginowi Product Design i integracji z Figmą stał się poważnym narzędziem projektowym. Open Design wpina Codeksa w open-source'owy proces projektowy — twój klucz OpenAI lub subskrypcja ChatGPT, twoje pliki, local-first.", + rich: {"heroCtaLead": "Open Design zamienia Codeksa w local-first, open-source'owego agenta projektowego — twój klucz OpenAI, twoje pliki, a wokół nich wyselekcjonowana biblioteka skills i systemów projektowych.", "heroCtaActions": [{"label": "Użyj Codeksa w Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Zostaw gwiazdkę na GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Pobierz aplikację desktopową", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex zaczynał jako generator kodu, ale w 2026 stał się wiarygodnym narzędziem do projektowania prawdziwych interfejsów — gdy tylko podasz mu właściwe referencje, skills i pętlę weryfikacji. To praktyczny, kompleksowy przewodnik po wykorzystaniu Codeksa do pracy nad UI, frontendem i systemami projektowymi oraz po wpięciu go w ustrukturyzowany proces projektowy z Open Design.", "Obejmuje on to, czym Codex jest dzisiaj, dlaczego nagle jest dobry we frontendzie, jak skonfigurować go od zera, pętlę zrzut-ekranu-do-UI, oficjalny dwukierunkowy obieg z Figmą, jak wypada na tle Cursora i Claude Code, pułapki, przez które wynik AI wygląda generycznie, oraz jak Open Design zasypuje tę lukę jako otwarta, local-first warstwa projektowa."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Pętla informacji zwrotnej w projektowaniu z Codeksem: terminalowy agent, przeglądarka renderująca UI oraz przestrzeń robocza, ze strzałką sprzężenia zwrotnego zawracającą do początku", "caption": "Główna pętla: Codex buduje UI w terminalu, renderuje je i weryfikuje w prawdziwej przeglądarce oraz iteruje względem twoich referencji."}, "tocLabel": "Na tej stronie", "toc": [{"id": "what-is-codex", "label": "Czym właściwie jest OpenAI Codex"}, {"id": "why-design", "label": "Dlaczego Codex jest teraz dobry w projektowaniu"}, {"id": "setup", "label": "Skonfiguruj Codeksa do projektowania (od zera)"}, {"id": "screenshot-workflow", "label": "Proces zrzut-ekranu-do-UI"}, {"id": "figma", "label": "Codex + dwukierunkowy obieg z Figmą"}, {"id": "vs", "label": "Codex kontra Cursor kontra Claude Code"}, {"id": "pitfalls", "label": "Pułapki i wygląd „AI slop”"}, {"id": "open-design", "label": "Projektowanie z Codeksem w Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-codex", "heading": "Czym właściwie jest OpenAI Codex (a czym nie jest)", "blocks": [{"kind": "p", "text": "Najpierw rozróżnienie, które myli niemal każdego, kto szuka „Codeksa”. Pierwotny OpenAI Codex był modelem uzupełniania kodu z 2021 roku, który napędzał wczesny GitHub Copilot i został wycofany w 2023. Nie o tym jest ta strona. Dzisiejszy Codex to agentowe narzędzie do kodowania od OpenAI — planuje, pisze, uruchamia i weryfikuje kod na podstawie zadań w języku naturalnym."}, {"kind": "p", "text": "Nowoczesny Codex dostarczany jest na czterech powierzchniach: terminalowy CLI (przepisany w Rust, na licencji Apache-2.0), rozszerzenie IDE dla VS Code, Cursora i Windsurfa, doświadczenie chmurowe/webowe do delegowanych zadań asynchronicznych oraz aplikacja desktopowa z wbudowaną przeglądarką i Computer Use."}, {"kind": "steps", "items": [{"label": "Domyślny model", "body": "Od połowy 2026 zalecanym modelem jest gpt-5.5, przy czym gpt-5.4 to model, który OpenAI wprost wytrenowało pod frontend i computer use."}, {"label": "Plik instrukcji", "body": "Codex czyta plik AGENTS.md w twoim projekcie (standard międzynarzędziowy) w poszukiwaniu reguł projektu — naturalne miejsce, by zakodować twoje konwencje projektowe."}, {"label": "Sandbox", "body": "Działa w sandboksie na poziomie jądra (domyślnie workspace-write), więc agent edytujący twoje UI nie może wyjść poza projekt."}]}, {"kind": "ul", "items": ["Dostawca: OpenAI", "Poświadczenie: klucz API OpenAI (BYOK) lub subskrypcja ChatGPT (Free / Go / Plus / Pro / Business / Enterprise)", "Licencja CLI: Apache-2.0, open source"]}]}, {"id": "why-design", "heading": "Dlaczego Codex jest teraz dobry w projektowaniu", "blocks": [{"kind": "p", "text": "Na początku 2026 zbiegły się trzy rzeczy, które uczyniły z Codeksa prawdziwe narzędzie projektowe, a nie generyczny generator kodu."}, {"kind": "steps", "items": [{"label": "Model wytrenowany pod frontend", "body": "OpenAI dostarczyło GPT-5.4, swój pierwszy główny model wytrenowany pod frontend i computer use, ze znacznie lepszym rozumieniem obrazów w całym procesie projektowym i silniejszą samoweryfikacją. Potrafi nawet generować mood boardy i opcje wizualne, zanim zobowiąże się do finalnych zasobów."}, {"label": "Oficjalny skill frontendowy", "body": "Katalog openai/skills dostarcza wyselekcjonowany skill frontendowy, który egzekwuje prawdziwe wyczucie smaku: układy bez kart, hero na całą szerokość, hierarchia stawiająca markę na pierwszym miejscu, powściągliwy ruch, najwyżej dwa kroje pisma i jeden kolor akcentu — i sprawia, że Codex spisuje tezę wizualną przed budowaniem."}, {"label": "Weryfikacja w przeglądarce", "body": "Dzięki skillowi Playwright Codex otwiera prawdziwą przeglądarkę, zmienia rozmiar do breakpointów i porównuje swój wynik z referencją, zamiast tylko sprawdzać, że build przechodzi."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Diagram pokazujący, jak system projektowy, skill i obraz referencyjny zbiegają się w dobry wynik projektowy", "caption": "Wyczucie smaku bierze się z trzech wkładów, które dostarczasz: systemu projektowego, skilla i prawdziwych obrazów referencyjnych."}, {"kind": "p", "text": "Wniosek za całą trójką: Codex domyślnie nie ma wyczucia smaku. Tworzy dobry projekt, gdy podasz mu ograniczenia — system projektowy, skill estetyczny i konkretne referencje. Open Design pakuje dokładnie te wkłady, dlatego te dwie rzeczy do siebie pasują (więcej poniżej)."}]}, {"id": "setup", "heading": "Skonfiguruj Codeksa do pracy projektowej, od zera", "blocks": [{"kind": "p", "text": "Oto pełna ścieżka od czystej maszyny do Codeksa, który potrafi budować i weryfikować UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Pięciokrokowy proces konfiguracji: instalacja, uwierzytelnienie, konfiguracja, instalacja skilla, weryfikacja", "caption": "Sekwencja konfiguracji: instalacja → uwierzytelnienie → konfiguracja AGENTS.md → instalacja skilla frontendowego → włączenie weryfikacji w przeglądarce."}, {"kind": "steps", "items": [{"label": "Zakoduj swoje reguły projektowe", "body": "Umieść swoje tokens, prymitywy i konwencje w AGENTS.md lub DESIGN.md i nakieruj na nie Codeksa, aby wynik pasował do marki, zamiast domyślać się generycznego wyglądu."}, {"label": "Wybierz właściwy poziom rozumowania", "body": "OpenAI zauważa, że niskie-do-średnich poziomy rozumowania często dają silniejsze rezultaty frontendowe niż ustawienie najwyższe."}]}]}, {"id": "screenshot-workflow", "heading": "Proces zrzut-ekranu-do-UI", "blocks": [{"kind": "p", "text": "Najbardziej dźwigniową pętlą projektową z Codeksem jest zamiana obrazu referencyjnego w działające, responsywne UI i iterowanie, aż się zgodzi. Własne wskazówki OpenAI sprowadzają się do pięciu kroków."}, {"kind": "ol", "items": ["Zacznij od najczytelniejszych referencji wizualnych, jakie masz — i uwzględnij wiele stanów (desktop i mobile, hover, pusty, ładowanie), nie tylko jeden kadr bohaterski.", "Bądź konkretny w poleceniu; mgliste polecenia dają generyczne UI.", "Przygotuj system projektowy i powiedz Codeksowi, gdzie znajdują się tokens i kanoniczne prymitywy.", "Włącz interaktywny skill Playwright, aby Codex renderował w prawdziwej przeglądarce i zmieniał rozmiar do breakpointów.", "Iteruj, każąc Codeksowi porównywać swoją implementację z powrotem ze zrzutami ekranu — a nie tylko potwierdzać, że się buduje."]}, {"kind": "p", "text": "Podaj obrazy, przeciągając zrzut ekranu do terminala lub używając flagi obrazu, a następnie daj polecenie z konkretnymi ograniczeniami:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Uruchom serwer deweloperski w drugim terminalu, trzymaj polecenia krótkie i skupione oraz commituj dobre iteracje / cofaj złe (mówiąc Codeksowi, kiedy cofasz), aby każde przejście budowało na czystej bazie."}]}, {"id": "figma", "heading": "Codex + Figma: dwukierunkowy obieg projekt ↔ kod", "blocks": [{"kind": "p", "text": "W lutym 2026 OpenAI i Figma ogłosiły oficjalne partnerstwo, zamieniając wcześniejszą betę Figma MCP w pierwszorzędną, dwukierunkową integrację. Działa w obie strony."}, {"kind": "steps", "items": [{"label": "Projekt → Kod", "body": "Skopiuj „link to selection” ramki w Figmie, wklej go do Codeksa z get_design_context i poproś o implementację projektu z użyciem twojej istniejącej biblioteki komponentów."}, {"label": "Kod → Projekt", "body": "Narzędzie generate_figma_design („Code to Canvas”) zamienia działające, uruchomione UI z powrotem w edytowalne ramki Figmy — cały ekran, wybrany element lub cały plik."}]}, {"kind": "p", "text": "Figma MCP działa jako serwer zdalny i jest zwolniony z limitów przepustowości. Dodaj go raz, a jest dostępny dla Codeksa, Claude Code, Cursora, VS Code i innych — dokładnie ten rodzaj przenośnej, wieloagentowej możliwości, do orkiestracji której zbudowany jest Open Design."}]}, {"id": "vs", "heading": "Codex kontra Cursor kontra Claude Code w projektowaniu", "blocks": [{"kind": "p", "text": "Nie ma jednego zwycięzcy w pracy projektowej — każdy agent ma inną mocną stronę, a doświadczone zespoły zestawiają je ze sobą. Uczciwe podsumowanie:"}, {"kind": "table", "columns": ["Agent", "Mocna strona projektowa", "Najlepszy do"], "rows": [["Codex", "Mocne dopracowanie wizualne po GPT-5.4 + skill frontendowy; rozumienie obrazów", "Delegowane asynchroniczne buildy, uruchomienia w sandboksie, przenośne reguły AGENTS.md"], ["Cursor", "Wizualna pętla buduj-i-zobacz z podglądem na żywo i edycjami inline", "Ciasna praca nad UI w trybie iteruj-i-obserwuj wewnątrz IDE"], ["Claude Code", "Konkretne decyzje projektowe (hex, odstępy, typografia) i UX świadomy bazy kodu", "Rozumowanie frontendowe i refaktoryzacje w dużym kontekście"]]}, {"kind": "p", "text": "Powracający werdykt społeczności jest taki, że wyczucie smaku pochodzi od ludzi: cała trójka domyślnie zbiega ku generycznej estetyce bez skills, referencji i ograniczeń. To jest prawdziwy problem do rozwiązania — i ma on kształt narzędzia projektowego, a nie modelu."}]}, {"id": "pitfalls", "heading": "Pułapki i jak unikać wyglądu „AI slop”", "blocks": [{"kind": "p", "text": "Najczęstszą skargą na projekty generowane przez Codeksa jest to, że wyglądają generycznie — miękkie gradienty, unoszące się panele, przeskalowane zaokrąglone rogi, dramatyczne cienie, klimat Inter-i-fiolet, który „krzyczy, że zrobiło to AI”. Inne zgłaszane problemy to popsute układy mobilne, przeciekanie instrukcji do treści UI oraz szybkie osiąganie limitów użycia."}, {"kind": "steps", "items": [{"label": "Zainstaluj skill frontendowy", "body": "Wyselekcjonowany skill estetyczny zmusza Codeksa do zobowiązania się do prawdziwego kierunku zamiast domyślnego wyglądu."}, {"label": "Włącz weryfikację Playwright", "body": "Spraw, aby Codex renderował i sam się sprawdzał na różnych breakpointach, tak by układy nie psuły się po cichu na mobile."}, {"label": "Dostarcz tokens i referencje", "body": "Prawdziwe design tokens i zrzuty ekranu referencji to pojedyncza największa dźwignia jakości wyniku."}, {"label": "Zakoduj reguły w AGENTS.md", "body": "Umieść reguły w stylu „bez kart bohaterskich, najwyżej dwa kroje pisma, hierarchia stawiająca markę na pierwszym miejscu” tam, gdzie agent czyta je przy każdym uruchomieniu."}]}, {"kind": "p", "text": "Zauważ, że każde z tych zabezpieczeń polega na daniu agentowi wyselekcjonowanego kontekstu projektowego. Ręczne utrzymywanie tego kontekstu, projekt po projekcie, to mozół, który usuwa Open Design."}]}, {"id": "open-design", "heading": "Projektowanie z Codeksem wewnątrz Open Design", "blocks": [{"kind": "p", "text": "Open Design to open-source'owa warstwa projektowa, o którą powyższy proces wciąż się dopomina. Traktuje Codeksa jako adapter pierwszej kategorii i otacza go wyselekcjonowaną biblioteką skills i systemów projektowych, ustrukturyzowanym potokiem renderowania oraz lokalnym desktopowym UI — więc kontekst projektowy, który czyni Codeksa dobrym, jest dostępny od pierwszego uruchomienia, a nie składany ręcznie za każdym razem."}, {"kind": "ol", "items": ["Zainstaluj Open Design i wybierz Codeksa jako swojego agenta.", "Uwierzytelnij się swoim kluczem API OpenAI (BYOK) lub subskrypcją ChatGPT — poświadczenia pozostają na twojej maszynie i nigdy nie są przekierowywane przez nas.", "Wybierz system projektowy i skill, a następnie generuj prezentacje, prototypy i strony docelowe ze spójnym wyczuciem smaku.", "Każdy artefakt i plik DESIGN.md żyje w twoim własnym repozytorium, a nie w hostowanej chmurze."]}, {"kind": "p", "text": "Ten sam agent Codex, ten sam klucz — plus prawdziwy, przenośny, open-source'owy proces projektowy wokół niego. Jest local-first i na licencji Apache-2.0, więc nic z twojej pracy ani twoich poświadczeń nie opuszcza twojej maszyny."}]}], "faqTitle": "Najczęściej zadawane pytania", "faq": [{"name": "Czy OpenAI Codex naprawdę potrafi wykonywać pracę projektową?", "text": "Tak — mając w kontekście skill frontendowy, system projektowy i prawdziwe obrazy referencyjne, Codex (zwłaszcza na GPT-5.4) tworzy responsywne UI o jakości produkcyjnej i potrafi je zweryfikować w przeglądarce. Bez tego kontekstu skłania się ku generycznemu wyglądowi, i to jest luka, którą wypełnia Open Design."}, {"name": "Czy to plugin Product Design od OpenAI Codex?", "text": "Nie. Open Design to niezależny projekt open-source, który integruje Codeksa jako agenta. Uzupełnia własne narzędzia OpenAI o local-first, otwartą bibliotekę skills i systemów projektowych."}, {"name": "Czy potrzebuję subskrypcji ChatGPT, aby projektować z Codeksem?", "text": "Możesz użyć albo klucza API OpenAI (BYOK), albo swojej subskrypcji ChatGPT. Logowanie do ChatGPT zazwyczaj daje hojniejsze limity; Open Design tak czy inaczej nigdy nie przekierowuje twoich poświadczeń."}, {"name": "Codex czy Claude Code do projektowania frontendu?", "text": "Oba są mocne. Claude Code jest znany z konkretnych, świadomych bazy kodu decyzji projektowych; Codex ma mocne dopracowanie wizualne po GPT-5.4 i wyróżnia się w delegowanych buildach w sandboksie. Wiele zespołów używa obu — Open Design pozwala przełączać agentów bez zmiany twojego procesu projektowego."}, {"name": "Jak połączyć Codeksa z Figmą?", "text": "Dodaj oficjalny serwer Figma MCP (codex mcp add figma --url https://mcp.figma.com/mcp). Następnie możesz implementować ramki Figmy w kodzie za pomocą get_design_context oraz wypchnąć działające UI z powrotem do edytowalnych ramek Figmy za pomocą generate_figma_design."}, {"name": "Jak uniknąć generycznej estetyki „AI slop”?", "text": "Zainstaluj skill frontendowy, dostarcz prawdziwe design tokens i zrzuty ekranu referencji, zakoduj reguły marki w AGENTS.md oraz włącz weryfikację Playwright. Open Design dostarcza je jako wyselekcjonowaną bibliotekę, więc omijasz konfigurację dla każdego projektu z osobna."}, {"name": "Czy Open Design jest powiązany z OpenAI?", "text": "Nie. Codex jest produktem OpenAI; Open Design to niezależny projekt open-source, który wspiera go jako adapter pierwszej kategorii. OpenAI i Codex są znakami towarowymi OpenAI."}, {"name": "Czy moje pliki i poświadczenia są bezpieczne?", "text": "Tak — Open Design jest local-first. Twoje pliki, artefakty i DESIGN.md pozostają w twoim własnym repozytorium, a twoje poświadczenia OpenAI są używane bezpośrednio przez twojego agenta, nigdy nie są przekierowywane przez serwery Open Design."}], "ctaTitle": "Projektuj z Codeksem, w otwarty sposób.", "ctaBody": "Przynieś własny klucz OpenAI, zachowaj każdy plik lokalnie i zyskaj wyselekcjonowaną bibliotekę projektową wokół agenta, którego już używasz.", "ctaActions": [{"label": "Użyj Codeksa w Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Zostaw gwiazdkę na GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Pobierz aplikację desktopową", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Zobacz wszystkich obsługiwanych agentów"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor dla projektantów — Open Design", + description: "Jak projektanci wykorzystują Cursora do projektowania UI i stron internetowych — Design Mode, Figma-do-kodu, Figma MCP — i jak Open Design zamienia Cursora w local-first, open-source'owego agenta projektowego.", + breadcrumb: "Cursor", + label: "Agent · Cursor", + heading: "Cursor dla projektantów.", + lead: "Cursor to edytor kodu oparty na AI, teraz z wizualnym Design Mode. Projektanci używają go do edycji UI poprzez wskazywanie i rysowanie oraz do zamiany Figmy w kod. Open Design wpina Cursor Agent w open-source'owy proces projektowy, który zachowuje twoje pliki lokalnie.", + rich: {"heroCtaLead": "Open Design zamienia Cursora w local-first, open-source'owego agenta projektowego — twoje konto Cursor lub klucze modeli, twoje pliki, a wokół nich wyselekcjonowana biblioteka skills i systemów projektowych.", "heroCtaActions": [{"label": "Użyj Cursora w Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Zostaw gwiazdkę na GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Pobierz aplikację desktopową", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor to edytor kodu AI-first, który uczynił z „zbuduj i obserwuj, jak się renderuje” domyślny sposób dostarczania UI. Dzięki trybowi Agent, edycjom inline, podglądowi w edytorze i Figmie przez MCP stał się prawdziwym narzędziem projektowym — gdy tylko podasz mu właściwe referencje, reguły i pętlę weryfikacji. To praktyczny, kompleksowy przewodnik po wykorzystaniu Cursora do pracy nad UI, frontendem i systemami projektowymi oraz po wpięciu go w ustrukturyzowany proces projektowy z Open Design.", "Obejmuje on to, czym właściwie jest Cursor, dlaczego jego ciasna pętla iteruj-i-obserwuj jest dobra do projektowania, jak skonfigurować go od zera, pętlę zrzut-ekranu-i-podgląd-do-UI, dwukierunkowy obieg z Figmą przez MCP, jak wypada na tle Codeksa i Claude Code, pułapki, przez które wynik AI wygląda generycznie, oraz jak Open Design zasypuje tę lukę jako otwarta, local-first warstwa projektowa."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Zbieżność projektowa Cursora: edytor po lewej, wyselekcjonowane centrum skills i systemu projektowego pośrodku ze znakiem Cursora w środku oraz wyrenderowane UI po prawej", "caption": "Główna idea: Cursor edytuje i renderuje UI w edytorze, podczas gdy wyselekcjonowane centrum projektowe zasila go systemem, skills i referencjami, które sprawiają, że wynik wygląda celowo."}, "tocLabel": "Na tej stronie", "toc": [{"id": "what-is-cursor", "label": "Czym właściwie jest Cursor"}, {"id": "why-design", "label": "Dlaczego Cursor jest dobry w projektowaniu"}, {"id": "setup", "label": "Skonfiguruj Cursora do projektowania (od zera)"}, {"id": "preview-workflow", "label": "Proces podgląd-do-UI"}, {"id": "figma", "label": "Cursor + Figma przez MCP"}, {"id": "vs", "label": "Cursor kontra Codex kontra Claude Code"}, {"id": "pitfalls", "label": "Pułapki i wygląd „AI slop”"}, {"id": "open-design", "label": "Projektowanie z Cursorem w Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-cursor", "heading": "Czym właściwie jest Cursor", "blocks": [{"kind": "p", "text": "Cursor to edytor kodu AI-first zbudowany przez Anysphere. To fork VS Code, więc zachowuje znajomy edytor, rozszerzenia i skróty klawiszowe, ale przebudowuje proces wokół agenta AI, który potrafi czytać cały twój projekt, edytować wiele plików, uruchamiać polecenia i iterować z tobą w pętli."}, {"kind": "p", "text": "Do pracy projektowej ważnymi powierzchniami są tryb Agent (opisujesz wynik, a Cursor planuje i edytuje w wielu plikach), edycje inline i uzupełnienia Tab do szybkich poprawek, podgląd / przeglądarka w edytorze, dzięki czemu widzisz działające UI bez opuszczania okna, oraz wsparcie MCP, które pozwala mu wciągać zewnętrzny kontekst, jak żywy plik Figmy."}, {"kind": "steps", "items": [{"label": "Reguły projektu", "body": "Cursor czyta pliki instrukcji projektu — wersjonowane reguły `.mdc` w `.cursor/rules` oraz zwykły `AGENTS.md` — więc możesz zakodować swoje konwencje projektowe tam, gdzie agent czyta je przy każdym uruchomieniu."}, {"label": "Modele", "body": "Cursor jest elastyczny pod względem modeli: dostarczany jest z czołowymi modelami przez twoją subskrypcję, a także obsługuje wnoszenie własnych kluczy modeli, więc wybierasz silnik stojący za tym samym procesem w edytorze."}, {"label": "MCP", "body": "Mówi w Model Context Protocol, więc zewnętrzne serwery — najistotniejszy serwer Figma MCP — stają się pierwszorzędnym kontekstem dla agenta."}]}, {"kind": "ul", "items": ["Dostawca: Anysphere", "Poświadczenie: konto / subskrypcja Cursor (Hobby / Pro / Business) lub własne klucze modeli (BYOK)", "Forma: edytor kodu AI-first (fork VS Code) z agentem i podglądem w edytorze"]}]}, {"id": "why-design", "heading": "Dlaczego Cursor jest dobry w projektowaniu", "blocks": [{"kind": "p", "text": "Przewaga projektowa Cursora to nie pojedyncza funkcja — to ciasność pętli buduj-i-zobacz. Trzy rzeczy sprawiają, że odczuwa się go jak narzędzie projektowe, a nie generyczny generator kodu."}, {"kind": "steps", "items": [{"label": "Ciasna pętla iteruj-i-obserwuj", "body": "Dajesz polecenie, Cursor edytuje w wielu plikach, a podgląd w edytorze natychmiast renderuje wynik — więc dostrajasz odstępy, hierarchię i ruch w sekundy, zamiast krążyć przez osobny terminal i przeglądarkę."}, {"label": "Bezpośrednia edycja wizualna", "body": "Poza czatem Cursor pozwala zaznaczać elementy w podglądzie i korygować style, więc drobne poprawki wizualne odczuwa się jak edycje projektowe, a nie archeologię kodu."}, {"label": "Reguły projektu i kontekst MCP", "body": "Dzięki `.cursor/rules` (lub `AGENTS.md`) i serwerowi Figma MCP agent pracuje względem twoich tokens, komponentów i prawdziwych specyfikacji projektowych zamiast zgadywać."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Diagram pokazujący, jak system projektowy, skill i obraz referencyjny zbiegają się w dobry wynik projektowy", "caption": "Wyczucie smaku bierze się z trzech wkładów, które dostarczasz: systemu projektowego, skilla i prawdziwych obrazów referencyjnych."}, {"kind": "p", "text": "Wniosek jest ten sam, którego uczy każdy agent: Cursor domyślnie nie ma wyczucia smaku. Tworzy dobry projekt, gdy podasz mu ograniczenia — system projektowy, skill estetyczny i konkretne referencje. Open Design pakuje dokładnie te wkłady, dlatego te dwie rzeczy do siebie pasują (więcej poniżej)."}]}, {"id": "setup", "heading": "Skonfiguruj Cursora do pracy projektowej, od zera", "blocks": [{"kind": "p", "text": "Oto pełna ścieżka od czystej maszyny do Cursora, który potrafi budować, podglądać i weryfikować UI względem twojego systemu projektowego."}, {"kind": "ol", "items": ["Zainstaluj Cursora z cursor.com i zaloguj się swoim kontem Cursor lub skonfiguruj własne klucze modeli (BYOK) w Ustawieniach.", "Otwórz swój projekt i wybierz model w panelu czatu / Agent.", "Dodaj reguły projektu: utwórz `.cursor/rules/*.mdc` dla ustrukturyzowanych, ograniczonych globami konwencji lub zwykły `AGENTS.md` dla prostych, czytelnych instrukcji.", "Połącz serwer Figma MCP (opcjonalnie), aby agent mógł czytać żywy kontekst projektowy.", "Uruchom serwer deweloperski i używaj podglądu w edytorze, aby widzieć i weryfikować UI w trakcie iterowania."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Pięciokrokowy proces konfiguracji: instalacja, uwierzytelnienie, konfiguracja reguł, dodanie skilla, weryfikacja", "caption": "Sekwencja konfiguracji: instalacja → uwierzytelnienie → konfiguracja reguł projektu → dodanie skilla → włączenie weryfikacji w podglądzie."}, {"kind": "p", "text": "Minimalny plik reguł projektu sprawia, że agent projektuje pod markę zamiast domyślać się generycznego wyglądu. Umieść go tam, gdzie Cursor czyta go przy każdym uruchomieniu:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Zakoduj swoje reguły projektowe", "body": "Umieść swoje tokens, prymitywy i konwencje w `.cursor/rules` lub `AGENTS.md` i nakieruj na nie Cursora, aby wynik pasował do marki, zamiast domyślać się generycznego wyglądu."}, {"label": "Trzymaj polecenia krótkie", "body": "Ciasna pętla Cursora nagradza skupione prośby — iteruj po jednym komponencie lub stanie naraz i obserwuj podgląd między przejściami."}]}]}, {"id": "preview-workflow", "heading": "Proces podgląd-do-UI", "blocks": [{"kind": "p", "text": "Najbardziej dźwigniową pętlą projektową z Cursorem jest zamiana referencji w działające, responsywne UI i iterowanie w edytorze, aż się zgodzi — obserwując podgląd na żywo przez cały czas zamiast zgadywać."}, {"kind": "ol", "items": ["Zacznij od najczytelniejszych referencji wizualnych, jakie masz — i uwzględnij wiele stanów (desktop i mobile, hover, pusty, ładowanie), nie tylko jeden kadr bohaterski.", "Bądź konkretny w poleceniu; mgliste polecenia dają generyczne UI.", "Przygotuj system projektowy i powiedz Cursorowi, gdzie znajdują się tokens i kanoniczne prymitywy.", "Trzymaj podgląd w edytorze otwarty, a serwer deweloperski uruchomiony, aby każda edycja renderowała się natychmiast na breakpointach, na których ci zależy.", "Iteruj, porównując wyrenderowane UI z powrotem z referencjami — i używaj bezpośredniego zaznaczania elementów w podglądzie do drobnych poprawek wizualnych."]}, {"kind": "p", "text": "Podaj referencje, dołączając obraz do czatu, a następnie daj polecenie z konkretnymi ograniczeniami:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Commituj dobre iteracje i cofaj złe (mówiąc Cursorowi, kiedy cofasz), aby każde przejście budowało na czystej bazie — ta sama dyscyplina, która chroni każdą pętlę agenta przed dryfowaniem."}]}, {"id": "figma", "heading": "Cursor + Figma: projekt ↔ kod przez MCP", "blocks": [{"kind": "p", "text": "Cursor łączy się z Figmą przez oficjalny serwer Figma MCP, który daje agentowi ustrukturyzowany dostęp do żywego pliku Figmy zamiast płaskiego zrzutu ekranu. To usuwa zgadywanie z przekazania."}, {"kind": "steps", "items": [{"label": "Projekt → Kod", "body": "Skopiuj link ramki w Figmie, wklej go do Cursora i poproś o implementację projektu. Serwer MCP udostępnia prawdziwy kontekst projektowy — komponenty, zmienne, dane układu, tokens — więc wygenerowany kod pasuje do źródła zamiast je przybliżać."}, {"label": "Zachowaj zgodność", "body": "Przy spójnie używanych w Figmie design tokens, stylach i komponentach (oraz Code Connect tam, gdzie jest dostępny) wynik Cursora pozostaje zmapowany na twój prawdziwy system projektowy zamiast wymyślać prymitywy na nowo."}]}, {"kind": "p", "text": "Skonfiguruj zdalny serwer Figma MCP raz, a jest dostępny dla Cursora jako pierwszorzędny kontekst. Ponieważ MCP jest otwartym standardem, ten sam serwer można ponownie wykorzystać w Cursorze, Claude Code, Codeksie i VS Code — dokładnie ten rodzaj przenośnej, wieloagentowej możliwości, do orkiestracji której zbudowany jest Open Design."}]}, {"id": "vs", "heading": "Cursor kontra Codex kontra Claude Code w projektowaniu", "blocks": [{"kind": "p", "text": "Nie ma jednego zwycięzcy w pracy projektowej — każdy agent ma inną mocną stronę, a doświadczone zespoły zestawiają je ze sobą. Uczciwe podsumowanie:"}, {"kind": "table", "columns": ["Agent", "Mocna strona projektowa", "Najlepszy do"], "rows": [["Cursor", "Wizualna pętla buduj-i-zobacz z podglądem na żywo w edytorze i bezpośrednią edycją elementów", "Ciasna praca nad UI w trybie iteruj-i-obserwuj wewnątrz IDE"], ["Codex", "Mocne dopracowanie wizualne ze skillem frontendowym; rozumienie obrazów i uruchomienia w sandboksie", "Delegowane asynchroniczne buildy i przenośne reguły AGENTS.md"], ["Claude Code", "Konkretne decyzje projektowe (hex, odstępy, typografia) i UX świadomy bazy kodu", "Rozumowanie frontendowe i refaktoryzacje w dużym kontekście"]]}, {"kind": "p", "text": "Powracający werdykt społeczności jest taki, że wyczucie smaku pochodzi od ludzi: cała trójka domyślnie zbiega ku generycznej estetyce bez skills, referencji i ograniczeń. To jest prawdziwy problem do rozwiązania — i ma on kształt narzędzia projektowego, a nie modelu."}]}, {"id": "pitfalls", "heading": "Pułapki i jak unikać wyglądu „AI slop”", "blocks": [{"kind": "p", "text": "Najczęstszą skargą na projekty generowane przez Cursora jest to, że wyglądają generycznie — miękkie gradienty, unoszące się panele, przeskalowane zaokrąglone rogi, dramatyczne cienie, klimat Inter-i-fiolet, który „krzyczy, że zrobiło to AI”. Inne zgłaszane problemy to układy psujące się na mobile oraz przeciekanie instrukcji do treści UI."}, {"kind": "steps", "items": [{"label": "Dodaj skill projektowy", "body": "Wyselekcjonowany skill estetyczny zmusza Cursora do zobowiązania się do prawdziwego kierunku zamiast domyślnego wyglądu."}, {"label": "Użyj podglądu do weryfikacji", "body": "Renderuj i sam się sprawdzaj na różnych breakpointach w podglądzie w edytorze, tak by układy nie psuły się po cichu na mobile."}, {"label": "Dostarcz tokens i referencje", "body": "Prawdziwe design tokens i zrzuty ekranu referencji to pojedyncza największa dźwignia jakości wyniku."}, {"label": "Zakoduj reguły w `.cursor/rules`", "body": "Umieść reguły w stylu „bez kart bohaterskich, najwyżej dwa kroje pisma, hierarchia stawiająca markę na pierwszym miejscu” tam, gdzie agent czyta je przy każdym uruchomieniu."}]}, {"kind": "p", "text": "Zauważ, że każde z tych zabezpieczeń polega na daniu agentowi wyselekcjonowanego kontekstu projektowego. Ręczne utrzymywanie tego kontekstu, projekt po projekcie, to mozół, który usuwa Open Design."}]}, {"id": "open-design", "heading": "Projektowanie z Cursorem wewnątrz Open Design", "blocks": [{"kind": "p", "text": "Open Design to open-source'owa warstwa projektowa, o którą powyższy proces wciąż się dopomina. Traktuje Cursora jako adapter pierwszej kategorii i otacza go wyselekcjonowaną biblioteką skills i systemów projektowych, ustrukturyzowanym potokiem renderowania oraz lokalnym desktopowym UI — więc kontekst projektowy, który czyni Cursora dobrym, jest dostępny od pierwszego uruchomienia, a nie składany ręcznie za każdym razem."}, {"kind": "ol", "items": ["Zainstaluj Open Design i wybierz Cursora jako swojego agenta.", "Uwierzytelnij się swoim kontem Cursor lub własnymi kluczami modeli (BYOK) — poświadczenia pozostają na twojej maszynie i nigdy nie są przekierowywane przez nas.", "Wybierz system projektowy i skill, a następnie generuj prezentacje, prototypy i strony docelowe ze spójnym wyczuciem smaku.", "Każdy artefakt i plik DESIGN.md żyje w twoim własnym repozytorium, a nie w hostowanej chmurze."]}, {"kind": "p", "text": "Ten sam agent Cursor, ten sam klucz — plus prawdziwy, przenośny, open-source'owy proces projektowy wokół niego. Jest local-first i na licencji Apache-2.0, więc nic z twojej pracy ani twoich poświadczeń nie opuszcza twojej maszyny."}]}], "faqTitle": "Najczęściej zadawane pytania", "faq": [{"name": "Czy Cursor naprawdę potrafi wykonywać pracę projektową?", "text": "Tak — mając w kontekście skill projektowy, system projektowy i prawdziwe obrazy referencyjne, Cursor tworzy responsywne UI o jakości produkcyjnej, a jego podgląd w edytorze pozwala je wizualnie zweryfikować i dopracować. Bez tego kontekstu skłania się ku generycznemu wyglądowi, i to jest luka, którą wypełnia Open Design."}, {"name": "Czy to oficjalny produkt Cursora?", "text": "Nie. Open Design to niezależny projekt open-source, który integruje Cursora jako agenta. Uzupełnia Cursora o local-first, otwartą bibliotekę skills i systemów projektowych."}, {"name": "Czy potrzebuję subskrypcji Cursor, aby projektować z Cursorem?", "text": "Możesz użyć konta / subskrypcji Cursor albo wnieść własne klucze modeli (BYOK). Open Design tak czy inaczej nigdy nie przekierowuje twoich poświadczeń — są one używane bezpośrednio przez twojego agenta."}, {"name": "Cursor czy Claude Code do projektowania frontendu?", "text": "Oba są mocne. Claude Code jest znany z konkretnych, świadomych bazy kodu decyzji projektowych; przewagą Cursora jest jego ciasna pętla buduj-i-zobacz z podglądem na żywo wewnątrz edytora. Wiele zespołów używa obu — Open Design pozwala przełączać agentów bez zmiany twojego procesu projektowego."}, {"name": "Jak połączyć Cursora z Figmą?", "text": "Dodaj oficjalny serwer Figma MCP w Cursorze, a następnie wklej link ramki Figmy do czatu i poproś Cursora o jej implementację. Serwer udostępnia prawdziwe komponenty, zmienne i dane układu, więc wygenerowany kod pasuje do źródłowego projektu."}, {"name": "Jak uniknąć generycznej estetyki „AI slop”?", "text": "Dodaj skill projektowy, dostarcz prawdziwe design tokens i zrzuty ekranu referencji, zakoduj reguły marki w `.cursor/rules` lub `AGENTS.md` oraz weryfikuj na różnych breakpointach w podglądzie. Open Design dostarcza je jako wyselekcjonowaną bibliotekę, więc omijasz konfigurację dla każdego projektu z osobna."}, {"name": "Czy Open Design jest powiązany z Cursorem lub Anysphere?", "text": "Nie. Cursor jest produktem Anysphere; Open Design to niezależny projekt open-source, który wspiera go jako adapter pierwszej kategorii. Cursor i Anysphere są znakami towarowymi Anysphere, Inc."}, {"name": "Czy moje pliki i poświadczenia są bezpieczne?", "text": "Tak — Open Design jest local-first. Twoje pliki, artefakty i DESIGN.md pozostają w twoim własnym repozytorium, a twoje poświadczenia Cursora lub modeli są używane bezpośrednio przez twojego agenta, nigdy nie są przekierowywane przez serwery Open Design."}], "ctaTitle": "Projektuj z Cursorem, w otwarty sposób.", "ctaBody": "Przynieś własne konto Cursor lub klucze modeli, zachowaj każdy plik lokalnie i zyskaj wyselekcjonowaną bibliotekę projektową wokół agenta, którego już używasz.", "ctaActions": [{"label": "Użyj Cursora w Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Zostaw gwiazdkę na GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Pobierz aplikację desktopową", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Zobacz wszystkich obsługiwanych agentów"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode dla projektowania — Open Design", + description: "Jak ludzie wykorzystują OpenCode do projektowania UI i stron internetowych — pliki design.md, skills UI/UX, Figma MCP — i jak Open Design zamienia OpenCode w local-first, open-source'owego agenta projektowego.", + breadcrumb: "OpenCode", + label: "Agent · OpenCode", + heading: "OpenCode dla projektowania.", + lead: "OpenCode to open-source'owy, terminalowy agent kodujący AI. Projektanci dokręcają do niego skills projektowe i pliki DESIGN.md, aby generować prawdziwe UI. Open Design czyni z tego ustrukturyzowany, open-source'owy proces — przynieś swoje klucze dostawców i zachowaj wszystko lokalnie.", + rich: {"heroCtaLead": "Open Design zamienia OpenCode w local-first, open-source'owego agenta projektowego — dowolny model, który wybierzesz, z własnym kluczem dostawcy, twoje pliki, a wokół nich wyselekcjonowana biblioteka skills i systemów projektowych.", "heroCtaActions": [{"label": "Użyj OpenCode w Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Zostaw gwiazdkę na GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Pobierz aplikację desktopową", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode to open-source'owy, terminalowy w pierwszej kolejności agent kodujący AI, który jest celowo niezależny od modelu: przynosisz własny klucz dostawcy i uruchamiasz dowolny model za tym samym procesem. Ta otwartość czyni go naturalną bazą do pracy projektowej — ale jak każdy agent, tworzy dobre UI tylko wtedy, gdy podasz mu właściwe referencje, skills i pętlę weryfikacji. To praktyczny, kompleksowy przewodnik po wykorzystaniu OpenCode do pracy nad UI, frontendem i systemami projektowymi oraz po wpięciu go w ustrukturyzowany proces projektowy z Open Design.", "Obejmuje on to, czym właściwie jest OpenCode, dlaczego niezależny od modelu otwarty agent jest dobrym wyborem do projektowania, jak skonfigurować go od zera, pętlę zrzut-ekranu-do-UI, jak AGENTS.md i MCP go rozszerzają, jak wypada na tle Codeksa, Claude Code i Cursora, pułapki, przez które wynik AI wygląda generycznie, oraz jak Open Design zasypuje tę lukę jako otwarta, local-first warstwa projektowa — naturalne połączenie, skoro oba projekty są open-source i działają na twojej własnej maszynie."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "Pętla informacji zwrotnej w projektowaniu z OpenCode: terminalowy agent TUI, przeglądarka renderująca UI oraz przestrzeń robocza, ze strzałką sprzężenia zwrotnego zawracającą do początku", "caption": "Główna pętla: OpenCode buduje UI w terminalu, renderuje je i weryfikuje w prawdziwej przeglądarce oraz iteruje względem twoich referencji — na dowolnym modelu, który wybierzesz."}, "tocLabel": "Na tej stronie", "toc": [{"id": "what-is-opencode", "label": "Czym właściwie jest OpenCode"}, {"id": "why-design", "label": "Dlaczego otwarty, dowolnomodelowy agent pasuje do projektowania"}, {"id": "setup", "label": "Skonfiguruj OpenCode do projektowania (od zera)"}, {"id": "screenshot-workflow", "label": "Proces zrzut-ekranu-do-UI"}, {"id": "extend", "label": "AGENTS.md, MCP i udostępnialne sesje"}, {"id": "vs", "label": "OpenCode kontra Codex kontra Claude Code kontra Cursor"}, {"id": "pitfalls", "label": "Pułapki i wygląd „AI slop”"}, {"id": "open-design", "label": "Projektowanie z OpenCode w Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-opencode", "heading": "Czym właściwie jest OpenCode", "blocks": [{"kind": "p", "text": "OpenCode to open-source'owy agent kodujący AI zbudowany pod terminal, utrzymywany przez zespół stojący za SST (Anomaly Innovations). Czyta twoje repozytorium, uruchamia polecenia, edytuje pliki i rozmawia z dużym modelem językowym — ale w przeciwieństwie do agentów związanych z dostawcą nie dostarcza własnego modelu. Kierujesz go na dowolnego dostawcę i model, jaki chcesz, i przynosisz własny klucz."}, {"kind": "p", "text": "Działa jako terminalowy interfejs (TUI), z aplikacją desktopową i rozszerzeniami IDE nadbudowanymi na tym samym silniku. Pod maską używa architektury klient/serwer, więc agent wykonujący pracę jest odsprzężony od powierzchni, z której nim sterujesz. Dwaj wbudowani agenci — build i plan — przełączają się klawiszem Tab."}, {"kind": "steps", "items": [{"label": "Niezależny od modelu", "body": "Modele i dostawcy pochodzą z models.dev, otwartego katalogu. Konfigurujesz je w opencode.json łańcuchem provider/model-id i możesz wyłączać dostawców, których nie chcesz ładować — więc ten sam proces projektowy działa na Anthropic, OpenAI, Google, OpenRouter, modelach lokalnych i innych."}, {"label": "Plik instrukcji", "body": "OpenCode czyta plik AGENTS.md w twoim projekcie (standard międzynarzędziowy, zgodny także z CLAUDE.md) w poszukiwaniu reguł projektu — naturalne miejsce, by zakodować twoje konwencje projektowe. Uruchom /init, aby wygenerować jeden."}, {"label": "Rozszerzalny", "body": "Obsługuje integrację LSP, serwery MCP, motywy, skróty klawiszowe i niestandardowe polecenia, a także udostępnialne linki do sesji dla współpracy."}]}, {"kind": "ul", "items": ["Opiekun: SST / Anomaly Innovations (projekt open-source)", "Poświadczenie: twój własny klucz/klucze API dostawcy modeli — BYOK, bez uwiązania do dostawcy", "Licencja: MIT, open source"]}]}, {"id": "why-design", "heading": "Dlaczego otwarty, dowolnomodelowy agent pasuje do pracy projektowej", "blocks": [{"kind": "p", "text": "OpenCode nie ma jednego „modelu projektowego” tak jak agent związany z dostawcą — i o to właśnie chodzi. Ponieważ jest niezależny od modelu i otwarty, możesz uruchamiać ten sam proces projektowy na modelu, który aktualnie jest najlepszy we frontendzie, później go wymienić lub cofnąć się do modelu lokalnego, a wszystko to bez zmiany konfiguracji."}, {"kind": "p", "text": "Ale sam wybór modelu nie kupuje wyczucia smaku. Jak każdy agent kodujący, OpenCode tworzy generyczne UI, dopóki nie podasz mu ograniczeń. Dobry wynik projektowy bierze się z trzech wkładów, które dostarczasz."}, {"kind": "steps", "items": [{"label": "System projektowy", "body": "Prawdziwe tokens, prymitywy i konwencje, które agent ponownie wykorzystuje, aby wynik pasował do marki, zamiast domyślać się generycznego wyglądu."}, {"label": "Skill estetyczny", "body": "Wyselekcjonowany skill, który egzekwuje prawdziwe wyczucie smaku — powściągliwy ruch, hierarchia stawiająca markę na pierwszym miejscu, najwyżej dwa kroje pisma i jeden kolor akcentu — i sprawia, że agent zobowiązuje się do kierunku przed budowaniem."}, {"label": "Konkretne referencje", "body": "Faktyczne obrazy referencyjne i wiele stanów (desktop i mobile, hover, pusty, ładowanie), a nie pojedynczy kadr bohaterski."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Diagram pokazujący, jak system projektowy, skill i obraz referencyjny zbiegają się w dobry wynik projektowy", "caption": "Wyczucie smaku bierze się z trzech wkładów, które dostarczasz: systemu projektowego, skilla i prawdziwych obrazów referencyjnych — niezależnie od tego, który model uruchamiasz."}, {"kind": "p", "text": "Wniosek: OpenCode daje ci swobodę modelu, ale wyczucie smaku wciąż bierze się z wyselekcjonowanego kontekstu projektowego. Open Design pakuje dokładnie te wkłady, dlatego te dwie rzeczy do siebie pasują — oba są open-source i local-first (więcej poniżej)."}]}, {"id": "setup", "heading": "Skonfiguruj OpenCode do pracy projektowej, od zera", "blocks": [{"kind": "p", "text": "Oto pełna ścieżka od czystej maszyny do OpenCode, który potrafi budować i weryfikować UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Pięciokrokowy proces konfiguracji: instalacja, uwierzytelnienie kluczem dostawcy, konfiguracja AGENTS.md, dodanie skilla, weryfikacja", "caption": "Sekwencja konfiguracji: instalacja → uwierzytelnienie (twój klucz dostawcy) → konfiguracja AGENTS.md → dodanie skilla → weryfikacja w prawdziwej przeglądarce."}, {"kind": "steps", "items": [{"label": "Zakoduj swoje reguły projektowe", "body": "Umieść swoje tokens, prymitywy i konwencje w AGENTS.md (lub DESIGN.md przywoływanym z niego), aby wynik pasował do marki, zamiast domyślać się generycznego wyglądu. Opcja instructions w opencode.json może wskazywać na dodatkowe pliki reguł przez globy."}, {"label": "Wybierz zdolny model", "body": "Ponieważ OpenCode jest niezależny od modelu, wybierz dostawcę/model aktualnie najsilniejszy we frontendzie na przejście projektowe — i zostaw resztę swojego procesu bez zmian."}]}]}, {"id": "screenshot-workflow", "heading": "Proces zrzut-ekranu-do-UI", "blocks": [{"kind": "p", "text": "Najbardziej dźwigniową pętlą projektową z dowolnym agentem jest zamiana obrazu referencyjnego w działające, responsywne UI i iterowanie, aż się zgodzi. Ten sam pięciokrokowy kształt obowiązuje w OpenCode."}, {"kind": "ol", "items": ["Zacznij od najczytelniejszych referencji wizualnych, jakie masz — i uwzględnij wiele stanów (desktop i mobile, hover, pusty, ładowanie), nie tylko jeden kadr bohaterski.", "Bądź konkretny w poleceniu; mgliste polecenia dają generyczne UI.", "Przygotuj system projektowy i powiedz OpenCode, gdzie znajdują się tokens i kanoniczne prymitywy (w AGENTS.md).", "Uruchom serwer deweloperski i każ agentowi renderować w prawdziwej przeglądarce, zmieniając rozmiar do breakpointów, aby sprawdzić wynik.", "Iteruj, każąc OpenCode porównywać swoją implementację z powrotem ze zrzutami ekranu — a nie tylko potwierdzać, że się buduje."]}, {"kind": "p", "text": "Odwołuj się do plików za pomocą @ w TUI, aby uzyskać rozmyte wyszukiwanie w twoim katalogu roboczym, uruchamiaj polecenia powłoki inline z wiodącym !, a akcjami steruj poleceniami /. Następnie daj polecenie z konkretnymi ograniczeniami:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Trzymaj polecenia krótkie i skupione, commituj dobre iteracje i cofaj złe (mówiąc OpenCode, kiedy cofasz), aby każde przejście budowało na czystej bazie."}]}, {"id": "extend", "heading": "AGENTS.md, MCP i udostępnialne sesje", "blocks": [{"kind": "p", "text": "Trzy punkty rozszerzeń czynią OpenCode praktycznym do długotrwałej pracy projektowej, a wszystkie trzy czysto odwzorowują się na otwarty proces projektowy."}, {"kind": "steps", "items": [{"label": "Reguły AGENTS.md", "body": "Reguły projektu żyją w AGENTS.md w korzeniu repozytorium (lub reguły globalne w ~/.config/opencode/AGENTS.md). To trwały dom dla twoich konwencji projektowych, czytany przy każdym uruchomieniu, i jest zgodny z plikami CLAUDE.md, których używają inne agenty."}, {"label": "Serwery MCP", "body": "OpenCode obsługuje zarówno lokalne (command), jak i zdalne (URL) serwery MCP, konfigurowane pod kluczem mcp — przenośny sposób wnoszenia kontekstu projektowego i zewnętrznych narzędzi, które działają w wielu agentach, nie tylko w OpenCode."}, {"label": "Udostępnialne sesje", "body": "Polecenie /share tworzy publiczny link do rozmowy dla współpracy lub przeglądu, a /unshare go odwołuje — przydatne do uzyskania informacji zwrotnej na temat przejścia projektowego."}]}, {"kind": "p", "text": "To są przenośne, wieloagentowe możliwości — dokładnie to, do orkiestracji czego zbudowany jest Open Design, zamiast odtwarzać je dla każdego projektu z osobna."}]}, {"id": "vs", "heading": "OpenCode kontra Codex kontra Claude Code kontra Cursor w projektowaniu", "blocks": [{"kind": "p", "text": "Nie ma jednego zwycięzcy w pracy projektowej — każdy agent ma inną mocną stronę, a doświadczone zespoły zestawiają je ze sobą. Uczciwe podsumowanie:"}, {"kind": "table", "columns": ["Agent", "Mocna strona projektowa", "Najlepszy do"], "rows": [["OpenCode", "Open-source i niezależny od modelu; uruchom dowolnego dostawcę za jednym terminalowym procesem", "Swoboda BYOK, przełączanie modeli, w pełni otwarte i local-first konfiguracje"], ["Codex", "Mocne dopracowanie wizualne ze skillem frontendowym; rozumienie obrazów", "Delegowane asynchroniczne, buildy w sandboksie, przenośne reguły AGENTS.md"], ["Claude Code", "Konkretne decyzje projektowe (hex, odstępy, typografia) i UX świadomy bazy kodu", "Rozumowanie frontendowe i refaktoryzacje w dużym kontekście"], ["Cursor", "Wizualna pętla buduj-i-zobacz z podglądem na żywo i edycjami inline", "Ciasna praca nad UI w trybie iteruj-i-obserwuj wewnątrz IDE"]]}, {"kind": "p", "text": "Powracający werdykt społeczności jest taki, że wyczucie smaku pochodzi od ludzi: wszystkie z nich domyślnie zbiegają ku generycznej estetyce bez skills, referencji i ograniczeń. To jest prawdziwy problem do rozwiązania — i ma on kształt narzędzia projektowego, a nie modelu, co jest dokładnie powodem, dla którego otwarty agent jak OpenCode tak dobrze łączy się z otwartą warstwą projektową."}]}, {"id": "pitfalls", "heading": "Pułapki i jak unikać wyglądu „AI slop”", "blocks": [{"kind": "p", "text": "Najczęstszą skargą na projekty generowane przez AI jest to, że wyglądają generycznie — miękkie gradienty, unoszące się panele, przeskalowane zaokrąglone rogi, dramatyczne cienie, klimat Inter-i-fiolet, który „krzyczy, że zrobiło to AI”. Inne zgłaszane problemy to popsute układy mobilne i przeciekanie instrukcji do treści UI. Żaden z nich nie jest charakterystyczny wyłącznie dla OpenCode; to się dzieje, gdy dowolny agent działa bez wyselekcjonowanego kontekstu projektowego."}, {"kind": "steps", "items": [{"label": "Dodaj skill estetyczny", "body": "Wyselekcjonowany skill projektowy zmusza agenta do zobowiązania się do prawdziwego kierunku zamiast domyślnego wyglądu."}, {"label": "Weryfikuj w prawdziwej przeglądarce", "body": "Renderuj i sam się sprawdzaj na różnych breakpointach, tak by układy nie psuły się po cichu na mobile."}, {"label": "Dostarcz tokens i referencje", "body": "Prawdziwe design tokens i zrzuty ekranu referencji to pojedyncza największa dźwignia jakości wyniku."}, {"label": "Zakoduj reguły w AGENTS.md", "body": "Umieść reguły w stylu „bez kart bohaterskich, najwyżej dwa kroje pisma, hierarchia stawiająca markę na pierwszym miejscu” tam, gdzie agent czyta je przy każdym uruchomieniu."}]}, {"kind": "p", "text": "Zauważ, że każde z tych zabezpieczeń polega na daniu agentowi wyselekcjonowanego kontekstu projektowego — niezależnie od tego, który model uruchamiasz. Ręczne utrzymywanie tego kontekstu, projekt po projekcie, to mozół, który usuwa Open Design."}]}, {"id": "open-design", "heading": "Projektowanie z OpenCode wewnątrz Open Design", "blocks": [{"kind": "p", "text": "Open Design to open-source'owa warstwa projektowa, o którą powyższy proces wciąż się dopomina. Traktuje OpenCode jako adapter pierwszej kategorii i otacza go wyselekcjonowaną biblioteką skills i systemów projektowych, ustrukturyzowanym potokiem renderowania oraz lokalnym desktopowym UI — więc kontekst projektowy, który czyni dowolnego agenta dobrym, jest dostępny od pierwszego uruchomienia, a nie składany ręcznie za każdym razem. Oba projekty są open-source i local-first, co czyni to połączenie naturalnym dopasowaniem."}, {"kind": "ol", "items": ["Zainstaluj Open Design i wybierz OpenCode jako swojego agenta.", "Uwierzytelnij się własnym kluczem API dostawcy modeli (BYOK) — poświadczenia pozostają na twojej maszynie i nigdy nie są przekierowywane przez nas.", "Wybierz dowolnego dostawcę i model, a także system projektowy i skill, a następnie generuj prezentacje, prototypy i strony docelowe ze spójnym wyczuciem smaku.", "Każdy artefakt i plik DESIGN.md żyje w twoim własnym repozytorium, a nie w hostowanej chmurze."]}, {"kind": "p", "text": "Ten sam agent OpenCode, ta sama swoboda modelu — plus prawdziwy, przenośny, open-source'owy proces projektowy wokół niego. Jest local-first i na licencji Apache-2.0, więc nic z twojej pracy ani twoich poświadczeń nie opuszcza twojej maszyny."}]}], "faqTitle": "Najczęściej zadawane pytania", "faq": [{"name": "Czy OpenCode naprawdę potrafi wykonywać pracę projektową?", "text": "Tak — mając w kontekście skill estetyczny, system projektowy i prawdziwe obrazy referencyjne, OpenCode tworzy responsywne UI o jakości produkcyjnej i potrafi je zweryfikować w przeglądarce. Ponieważ jest niezależny od modelu, uruchamiasz model aktualnie najlepszy we frontendzie. Bez tego wyselekcjonowanego kontekstu skłania się ku generycznemu wyglądowi, i to jest luka, którą wypełnia Open Design."}, {"name": "Którego modelu powinienem użyć z OpenCode do projektowania?", "text": "Dowolnego, jaki lubisz — OpenCode jest niezależny od dostawcy przez models.dev, więc możesz uruchamiać Anthropic, OpenAI, Google, OpenRouter lub modele lokalne za tym samym procesem i przełączać się w dowolnym momencie. Jakość wyniku projektowego zależy znacznie bardziej od twojego skilla, systemu projektowego i referencji niż od samego modelu."}, {"name": "Czy Open Design jest tworzony przez zespół OpenCode (SST)?", "text": "Nie. Open Design to niezależny projekt open-source, który integruje OpenCode jako agenta. Uzupełnia OpenCode o local-first, otwartą bibliotekę skills i systemów projektowych."}, {"name": "Czy potrzebuję specjalnej subskrypcji, aby projektować z OpenCode?", "text": "Nie — OpenCode jest BYOK. Przynosisz własny klucz API dostawcy modeli, a Open Design nigdy nie przekierowuje twoich poświadczeń. Nie ma uwiązania do dostawcy."}, {"name": "OpenCode, Codex czy Claude Code do projektowania frontendu?", "text": "Wszystkie są mocne, a wiele zespołów zestawia je ze sobą. Przewagą OpenCode jest bycie w pełni open-source i niezależnym od modelu; Codex wyróżnia się w delegowanych buildach w sandboksie; Claude Code jest znany z konkretnych, świadomych bazy kodu decyzji projektowych. Open Design pozwala przełączać agentów bez zmiany twojego procesu projektowego."}, {"name": "Jak rozszerzyć OpenCode o kontekst projektowy?", "text": "Zakoduj reguły w AGENTS.md, dodaj serwery MCP pod kluczem mcp dla przenośnych narzędzi i kontekstu projektowego oraz używaj udostępnialnych sesji do przeglądu. Open Design dostarcza wyselekcjonowaną bibliotekę skills i systemów projektowych, więc omijasz konfigurację dla każdego projektu z osobna."}, {"name": "Czy Open Design jest powiązany z OpenCode lub SST?", "text": "Nie. OpenCode to projekt open-source utrzymywany przez SST (Anomaly Innovations); Open Design to niezależny projekt open-source, który wspiera go jako adapter pierwszej kategorii."}, {"name": "Czy moje pliki i poświadczenia są bezpieczne?", "text": "Tak — Open Design jest local-first. Twoje pliki, artefakty i DESIGN.md pozostają w twoim własnym repozytorium, a twoje poświadczenia dostawcy modeli są używane bezpośrednio przez twojego agenta, nigdy nie są przekierowywane przez serwery Open Design."}], "ctaTitle": "Projektuj z OpenCode, w otwarty sposób.", "ctaBody": "Przynieś własny klucz dostawcy modeli, zachowaj każdy plik lokalnie i zyskaj wyselekcjonowaną bibliotekę projektową wokół otwartego agenta, którego już używasz.", "ctaActions": [{"label": "Użyj OpenCode w Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Zostaw gwiazdkę na GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Pobierz aplikację desktopową", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Zobacz wszystkich obsługiwanych agentów"}, + }, + }, + 'id': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code untuk desain — Open Design", + description: "Bagaimana desainer menggunakan Claude Code untuk desain UI dan web, dan bagaimana Open Design mengubahnya menjadi agen desain sungguhan — local-first, BYOK, dengan pustaka skill dan design system yang terkurasi.", + breadcrumb: "Claude Code", + label: "Agen · Claude Code", + heading: "Claude Code untuk desain.", + lead: "Claude Code adalah agen coding terminal dari Anthropic. Orang sudah menggunakannya untuk membangun UI, design system, dan landing page. Open Design menghubungkannya ke alur kerja desain sungguhan — bawa kunci Anthropic atau langganan Claude Anda, simpan setiap file secara lokal.", + rich: {"heroCtaLead": "Open Design mengubah Claude Code menjadi agen desain open-source yang local-first — kunci Anthropic atau langganan Claude Anda, file Anda, dengan pustaka skill dan design system terkurasi di sekelilingnya.", "heroCtaActions": [{"label": "Gunakan Claude Code di dalam Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Beri bintang di GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Unduh aplikasi desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code secara luas dianggap sebagai agen coding dengan selera frontend terbaik — ia bernalar tentang antarmuka dengan kekhususan yang tidak biasa, menyebutkan nilai hex, spacing, dan type scale yang persis, serta merefaktor UI di seluruh codebase besar tanpa kehilangan alur pikir. Namun secara default, ia masih cenderung mengarah ke tampilan generik kecuali Anda memberikannya design system, skill, dan referensi nyata. Ini adalah panduan praktis end-to-end untuk menggunakan Claude Code dalam pekerjaan UI, frontend, dan design system, serta untuk merangkainya ke dalam alur kerja terstruktur dengan Open Design.", "Panduan ini membahas apa sebenarnya Claude Code itu, mengapa ia kuat di frontend, cara menyiapkannya dari nol, alur kerja CLAUDE.md dan Skills, round-trip Figma resmi, perbandingannya dengan Codex dan Cursor, jebakan yang membuat output AI terlihat generik, dan bagaimana Open Design menutup celah itu sebagai lapisan desain terbuka yang local-first."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Loop umpan balik desain Claude Code: agen terminal yang membuat keputusan desain spesifik, browser yang merender UI, dan workspace, dengan panah umpan balik yang berputar kembali", "caption": "Loop inti: Claude Code menalar keputusan UI yang spesifik di terminal, merender dan memverifikasinya di browser sungguhan, lalu mengonvergensikannya terhadap referensi Anda."}, "tocLabel": "Di halaman ini", "toc": [{"id": "what-is-claude-code", "label": "Apa sebenarnya Claude Code itu"}, {"id": "why-design", "label": "Mengapa Claude Code bagus untuk desain"}, {"id": "setup", "label": "Menyiapkan Claude Code untuk desain (dari nol)"}, {"id": "skills-workflow", "label": "Alur kerja CLAUDE.md dan Skills"}, {"id": "figma", "label": "Round-trip Claude Code + Figma"}, {"id": "vs", "label": "Claude Code vs Codex vs Cursor"}, {"id": "pitfalls", "label": "Jebakan dan tampilan “AI slop”"}, {"id": "open-design", "label": "Mendesain dengan Claude Code di Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-claude-code", "heading": "Apa sebenarnya Claude Code itu", "blocks": [{"kind": "p", "text": "Claude Code adalah alat coding agentic dari Anthropic. Ia membaca codebase Anda, menyunting file, menjalankan perintah, dan terintegrasi dengan alat pengembangan Anda — merencanakan, menulis, dan memverifikasi pekerjaan dari tugas berbahasa alami, bukan sekadar melengkapi baris secara otomatis."}, {"kind": "p", "text": "Ia hadir di beberapa permukaan yang semuanya berbagi mesin yang sama: CLI terminal, ekstensi IDE untuk VS Code, Cursor, dan JetBrains, aplikasi desktop dengan tinjauan diff visual, serta pengalaman web untuk tugas yang berjalan lama. File CLAUDE.md, pengaturan, dan server MCP Anda terbawa di semuanya."}, {"kind": "steps", "items": [{"label": "File instruksi", "body": "Claude Code membaca file CLAUDE.md di root proyek Anda pada awal setiap sesi — tempat alami untuk menuliskan konvensi desain, tokens, dan checklist tinjauan Anda."}, {"label": "Skills", "body": "Agent Skills mengemas instruksi, skrip, dan sumber daya yang dapat diulang yang dimuat Claude sesuai kebutuhan, termasuk skill Frontend Design resmi dari Anthropic untuk selera."}, {"label": "Plan dan subagent", "body": "Ia dapat merencanakan sebelum bertindak dan memunculkan subagent yang mengerjakan bagian-bagian berbeda dari suatu tugas secara paralel, yang menjaga refaktor UI besar tetap koheren."}]}, {"kind": "ul", "items": ["Vendor: Anthropic", "Kredensial: kunci API Anthropic (BYOK, melalui Console) atau langganan Claude (Pro / Max)", "Permukaan: CLI terminal, ekstensi VS Code / Cursor / JetBrains, aplikasi desktop, web"]}]}, {"id": "why-design", "heading": "Mengapa Claude Code bagus untuk desain", "blocks": [{"kind": "p", "text": "Di antara agen coding, Claude Code punya reputasi soal selera dalam pekerjaan frontend. Beberapa hal menjelaskannya."}, {"kind": "steps", "items": [{"label": "Keputusan spesifik, bukan samar", "body": "Claude Code cenderung berkomitmen pada pilihan konkret — nilai hex yang persis, spacing scale, type ramp, dan hierarki komponen — alih-alih mengambang, dan itulah yang membedakan antarmuka sungguhan dari placeholder."}, {"label": "Penalaran yang sadar codebase", "body": "Dengan konteks kerja yang besar, ia merefaktor UI di banyak file sekaligus, menggunakan kembali komponen dan tokens Anda yang ada, alih-alih menciptakan ulang gaya sekali pakai."}, {"label": "Skill frontend resmi", "body": "Anthropic menyediakan skill Frontend Design yang membuat Claude menulis arah desain lebih dulu dan secara sengaja menjauh dari font sistem generik dan gradien ungu yang bisa ditebak."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Diagram yang menunjukkan design system, skill, dan gambar referensi mengonvergensi menjadi output desain yang baik", "caption": "Selera datang dari tiga masukan yang Anda berikan: design system, skill, dan gambar referensi nyata."}, {"kind": "p", "text": "Pelajarannya sama dengan yang Anthropic katakan tentang modelnya sendiri: Claude tidak punya selera secara default — dibiarkan sendiri, ia mengonvergensi ke pusat statistik desain web (Inter, gradien ungu, soft shadow). Ia menghasilkan desain yang baik ketika Anda memberinya batasan. Open Design mengemas masukan-masukan itu secara persis, dan itulah mengapa keduanya cocok bersama (lebih lanjut di bawah)."}]}, {"id": "setup", "heading": "Menyiapkan Claude Code untuk pekerjaan desain, dari nol", "blocks": [{"kind": "p", "text": "Berikut jalur lengkap dari mesin yang bersih hingga Claude Code yang dapat membangun dan memverifikasi UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Alur penyiapan lima langkah: install, autentikasi, konfigurasi CLAUDE.md, tambah skill, verifikasi", "caption": "Urutan penyiapan: install → autentikasi → konfigurasi CLAUDE.md → tambahkan skill Frontend Design → aktifkan verifikasi browser."}, {"kind": "steps", "items": [{"label": "Tuliskan aturan desain Anda", "body": "Letakkan tokens, primitif, dan konvensi Anda di CLAUDE.md dan arahkan Claude ke sana, sehingga output sesuai dengan brand alih-alih jatuh ke tampilan generik."}, {"label": "Tambahkan verifikasi browser", "body": "Hubungkan Playwright atau Chrome MCP agar Claude merender di browser sungguhan dan memeriksa output-nya di berbagai breakpoint, bukan hanya memastikan build lolos."}]}]}, {"id": "skills-workflow", "heading": "Alur kerja CLAUDE.md dan Skills", "blocks": [{"kind": "p", "text": "Loop desain dengan daya ungkit tertinggi pada Claude Code adalah memberinya referensi nyata plus konteks desain Anda, lalu mengiterasi hingga UI cocok — dengan CLAUDE.md dan Skills membawa batasannya sehingga Anda tidak perlu menjelaskannya ulang di setiap prompt."}, {"kind": "ol", "items": ["Mulai dari referensi visual paling jelas yang Anda miliki — dan sertakan banyak state (desktop dan mobile, hover, kosong, loading), bukan hanya satu hero shot.", "Bersikaplah spesifik dalam prompt; prompt yang samar menghasilkan UI generik bahkan dengan agen yang kuat.", "Simpan design system dan konvensi Anda di CLAUDE.md, dan beri tahu Claude di mana tokens dan primitif kanonis berada.", "Tambahkan skill Frontend Design agar Claude berkomitmen pada arah estetik nyata sebelum menulis kode.", "Hubungkan verifikasi browser agar Claude merender, mengubah ukuran ke breakpoint, dan membandingkannya kembali ke referensi — bukan sekadar memastikan ia berhasil build."]}, {"kind": "p", "text": "Jatuhkan gambar referensi ke dalam sesi dan beri prompt dengan batasan konkret:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Jalankan dev server di sampingnya, jaga prompt tetap kecil dan terfokus, lalu commit iterasi yang baik / revert yang buruk (beri tahu Claude saat Anda revert) sehingga setiap putaran dibangun di atas dasar yang bersih. Gunakan plan mode untuk refaktor yang lebih besar agar Anda bisa meninjau pendekatannya sebelum ada perubahan file."}]}, {"id": "figma", "heading": "Claude Code + Figma: round-trip desain ↔ kode", "blocks": [{"kind": "p", "text": "Pada Februari 2026 Anthropic dan Figma merilis integrasi dwiarah kelas satu melalui server Figma MCP. Ia bekerja di kedua arah."}, {"kind": "steps", "items": [{"label": "Desain → Kode", "body": "Pilih sebuah frame di Figma atau tempelkan tautan ke Claude Code, tarik konteks desainnya, dan minta ia mengimplementasikan desain menggunakan pustaka komponen Anda yang ada. Code Connect menjaga output tetap selaras dengan komponen nyata Anda."}, {"label": "Kode → Desain", "body": "Bangun dan pratinjau sebuah fitur di browser, lalu katakan “Send this to Figma” untuk menangkap UI yang berjalan sebagai layer Figma yang dapat disunting — seluruh layar atau elemen terpilih."}]}, {"kind": "p", "text": "Install sekali dengan claude plugin install figma@claude-plugins-official (Dev Mode MCP memerlukan paket Figma berbayar). Figma MCP yang sama tersedia untuk Claude Code, Codex, Cursor, dan VS Code — persis jenis kemampuan portabel dan multi-agen yang dibuat untuk diorkestrasikan oleh Open Design."}]}, {"id": "vs", "heading": "Claude Code vs Codex vs Cursor untuk desain", "blocks": [{"kind": "p", "text": "Tidak ada pemenang tunggal untuk pekerjaan desain — setiap agen punya kekuatan berbeda, dan tim berpengalaman menumpuknya. Ringkasan yang adil:"}, {"kind": "table", "columns": ["Agen", "Kekuatan desain", "Paling cocok untuk"], "rows": [["Claude Code", "Keputusan desain spesifik (hex, spacing, type) dan penalaran UX yang sadar codebase", "Penalaran frontend dan refaktor konteks besar"], ["Codex", "Poles visual yang kuat dan pemahaman gambar; build asinkron tersandbox", "Build asinkron yang didelegasikan dan aturan AGENTS.md yang portabel"], ["Cursor", "Loop build-and-see visual dengan pratinjau langsung dan suntingan inline", "Pekerjaan UI iterate-and-watch yang rapat di dalam IDE"]]}, {"kind": "p", "text": "Putusan komunitas yang berulang adalah bahwa selera datang dari manusia: ketiganya jatuh ke estetika generik tanpa skill, referensi, dan batasan. Itulah masalah sebenarnya yang harus dipecahkan — dan bentuknya seperti alat desain, bukan seperti model."}]}, {"id": "pitfalls", "heading": "Jebakan, dan cara menghindari tampilan “AI slop”", "blocks": [{"kind": "p", "text": "Bahkan dengan reputasi selera Claude Code, keluhan paling umum tentang desain hasil AI adalah tampilannya yang generik — font Inter, gradien ungu di atas putih, soft shadow, sudut membulat berukuran berlebihan, estetika yang “berteriak ini buatan AI.” Anthropic sendiri mengaitkannya dengan konvergensi distribusional: pilihan aman mendominasi data pelatihan web. Masalah lain yang dilaporkan termasuk layout mobile yang rusak dan instruksi yang bocor ke teks UI."}, {"kind": "steps", "items": [{"label": "Install skill Frontend Design", "body": "Ia memaksa Claude berkomitmen pada arah nyata dan secara eksplisit menghindari font dan gradien yang terlalu sering dipakai oleh AI."}, {"label": "Aktifkan verifikasi browser", "body": "Buat Claude merender dan memeriksa diri sendiri di berbagai breakpoint sehingga layout tidak diam-diam rusak di mobile."}, {"label": "Sediakan tokens dan referensi", "body": "Design tokens nyata dan screenshot referensi adalah satu daya ungkit terbesar bagi kualitas output."}, {"label": "Tuliskan aturan di CLAUDE.md", "body": "Letakkan aturan bergaya “tanpa hero card, maksimal dua typeface, hierarki brand-first” di tempat yang dibaca agen pada setiap putaran."}]}, {"kind": "p", "text": "Perhatikan bahwa setiap mitigasi adalah soal memberi agen konteks desain yang terkurasi. Memelihara konteks itu secara manual, per proyek, adalah kerja melelahkan yang dihapus Open Design."}]}, {"id": "open-design", "heading": "Mendesain dengan Claude Code di dalam Open Design", "blocks": [{"kind": "p", "text": "Open Design adalah lapisan desain open-source yang terus diminta oleh alur kerja di atas. Ia memperlakukan Claude Code sebagai adaptor first-party dan membungkusnya dengan pustaka skill dan design system terkurasi, pipeline render terstruktur, dan UI desktop lokal — sehingga konteks desain yang membuat Claude Code bagus sudah ada sejak putaran pertama, bukan dirakit secara manual setiap kali."}, {"kind": "ol", "items": ["Install Open Design dan pilih Claude Code sebagai agen Anda.", "Autentikasi dengan kunci API Anthropic (BYOK) atau langganan Claude Anda — kredensial tetap di mesin Anda dan tidak pernah diproksi melalui kami.", "Pilih design system dan skill, lalu hasilkan deck, prototipe, dan landing page dengan selera yang konsisten.", "Setiap artefak dan file DESIGN.md hidup di repo Anda sendiri, bukan di cloud yang dihosting."]}, {"kind": "p", "text": "Agen Claude Code yang sama, kunci yang sama — ditambah alur kerja desain open-source yang nyata dan portabel di sekelilingnya. Ia local-first dan Apache-2.0, sehingga tidak ada bagian dari pekerjaan atau kredensial Anda yang meninggalkan mesin Anda."}]}], "faqTitle": "Pertanyaan yang sering diajukan", "faq": [{"name": "Apakah Claude Code bagus untuk pekerjaan desain?", "text": "Ya — ia secara luas dianggap sebagai agen coding dengan selera frontend terbaik, membuat keputusan spesifik dan sadar codebase tentang nilai hex, spacing, dan type scale. Dengan skill Frontend Design, design system, dan gambar referensi nyata dalam konteks, ia menghasilkan UI berkualitas produksi dan responsif serta dapat memverifikasinya di browser. Tanpa konteks itu, ia cenderung jatuh ke tampilan generik, dan itulah celah yang diisi Open Design."}, {"name": "Apakah saya butuh langganan Claude untuk mendesain dengan Claude Code?", "text": "Anda dapat menggunakan kunci API Anthropic (BYOK, melalui Console) atau langganan Claude (Pro / Max). Bagaimanapun, Open Design tidak pernah memproksi kredensial Anda — kredensial digunakan langsung oleh agen Anda di mesin Anda."}, {"name": "Claude Code atau Codex untuk desain frontend?", "text": "Keduanya kuat. Claude Code dikenal karena keputusan desain yang spesifik dan sadar codebase serta penalaran frontend; Codex punya poles visual yang kuat dan unggul dalam build yang didelegasikan dan tersandbox. Banyak tim memakai keduanya — Open Design memungkinkan Anda berganti agen tanpa mengubah alur kerja desain Anda."}, {"name": "Bagaimana cara menghubungkan Claude Code ke Figma?", "text": "Install plugin Figma resmi dengan claude plugin install figma@claude-plugins-official. Anda kemudian dapat mengimplementasikan frame Figma dalam kode menggunakan konteks desain, dan mendorong UI yang berjalan kembali ke frame Figma yang dapat disunting dengan “Send this to Figma.” Dev Mode MCP memerlukan paket Figma berbayar."}, {"name": "Apa itu Skills dan CLAUDE.md?", "text": "CLAUDE.md adalah file markdown di root proyek Anda yang dibaca Claude Code pada awal setiap sesi — tempat untuk menuliskan konvensi desain Anda. Skills mengemas instruksi dan sumber daya yang dapat diulang yang dimuat Claude sesuai kebutuhan, termasuk skill Frontend Design resmi dari Anthropic. Open Design menyediakan pustaka keduanya yang terkurasi sehingga Anda melewati penyiapan per proyek."}, {"name": "Bagaimana cara menghindari estetika “AI slop” yang generik?", "text": "Install skill Frontend Design, sediakan design tokens nyata dan screenshot referensi, tuliskan aturan brand di CLAUDE.md, dan aktifkan verifikasi browser. Open Design menyediakan ini sebagai pustaka terkurasi sehingga Anda melewati penyiapan per proyek."}, {"name": "Apakah Open Design berafiliasi dengan Anthropic?", "text": "Tidak. Claude Code adalah produk Anthropic; Open Design adalah proyek open-source independen yang mendukungnya sebagai adaptor first-party. Claude dan Claude Code adalah merek dagang Anthropic."}, {"name": "Apakah file dan kredensial saya aman?", "text": "Ya — Open Design bersifat local-first dan Apache-2.0. File, artefak, dan DESIGN.md Anda tetap di repo Anda sendiri, dan kredensial Anthropic Anda digunakan langsung oleh agen Anda, tidak pernah dirutekan melalui server Open Design."}], "ctaTitle": "Mendesain dengan Claude Code, dengan cara terbuka.", "ctaBody": "Bawa kunci Anthropic atau langganan Claude Anda sendiri, simpan setiap file secara lokal, dan dapatkan pustaka desain terkurasi di sekeliling agen yang sudah Anda gunakan.", "ctaActions": [{"label": "Gunakan Claude Code di dalam Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Beri bintang di GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Unduh aplikasi desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Lihat semua agen yang didukung"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex untuk desain — Open Design", + description: "Bagaimana orang menggunakan OpenAI Codex untuk desain UI dan web — plugin Product Design, integrasi Figma, skill frontend — dan bagaimana Open Design mengubah Codex menjadi agen desain open-source yang local-first.", + breadcrumb: "Codex", + label: "Agen · Codex", + heading: "Codex untuk desain.", + lead: "Codex adalah agen coding dari OpenAI. Dengan plugin Product Design dan integrasi Figma-nya, ia telah menjadi alat desain yang serius. Open Design merangkai Codex ke alur kerja desain open-source — kunci OpenAI atau langganan ChatGPT Anda, file Anda, local-first.", + rich: {"heroCtaLead": "Open Design mengubah Codex menjadi agen desain open-source yang local-first — kunci OpenAI Anda, file Anda, dengan pustaka skill dan design system terkurasi di sekelilingnya.", "heroCtaActions": [{"label": "Gunakan Codex di dalam Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Beri bintang di GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Unduh aplikasi desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex bermula sebagai generator kode, tetapi pada 2026 ia menjadi alat yang kredibel untuk mendesain antarmuka sungguhan — begitu Anda memberinya referensi, skill, dan loop verifikasi yang tepat. Ini adalah panduan praktis end-to-end untuk menggunakan Codex dalam pekerjaan UI, frontend, dan design system, serta untuk merangkainya ke alur kerja desain terstruktur dengan Open Design.", "Panduan ini membahas apa itu Codex sekarang, mengapa ia tiba-tiba bagus di frontend, cara menyiapkannya dari nol, loop screenshot-to-UI, round-trip Figma resmi, perbandingannya dengan Cursor dan Claude Code, jebakan yang membuat output AI terlihat generik, dan bagaimana Open Design menutup celah itu sebagai lapisan desain terbuka yang local-first."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Loop umpan balik desain Codex: agen terminal, browser yang merender UI, dan workspace, dengan panah umpan balik yang berputar kembali", "caption": "Loop inti: Codex membangun UI di terminal, merender dan memverifikasinya di browser sungguhan, lalu mengiterasinya terhadap referensi Anda."}, "tocLabel": "Di halaman ini", "toc": [{"id": "what-is-codex", "label": "Apa sebenarnya OpenAI Codex itu"}, {"id": "why-design", "label": "Mengapa Codex sekarang bagus untuk desain"}, {"id": "setup", "label": "Menyiapkan Codex untuk desain (dari nol)"}, {"id": "screenshot-workflow", "label": "Alur kerja screenshot-to-UI"}, {"id": "figma", "label": "Round-trip Codex + Figma"}, {"id": "vs", "label": "Codex vs Cursor vs Claude Code"}, {"id": "pitfalls", "label": "Jebakan dan tampilan “AI slop”"}, {"id": "open-design", "label": "Mendesain dengan Codex di Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-codex", "heading": "Apa sebenarnya OpenAI Codex itu (dan apa yang bukan)", "blocks": [{"kind": "p", "text": "Pertama, sebuah penjelasan yang membingungkan hampir semua orang yang mencari “Codex.” OpenAI Codex yang asli adalah model penyelesaian kode tahun 2021 yang menggerakkan GitHub Copilot awal dan dihentikan pada 2023. Itu bukan yang dibahas halaman ini. Codex masa kini adalah alat coding agentic dari OpenAI — ia merencanakan, menulis, menjalankan, dan memverifikasi kode dari tugas berbahasa alami."}, {"kind": "p", "text": "Codex modern hadir di empat permukaan: CLI terminal (ditulis ulang dalam Rust, berlisensi Apache-2.0), ekstensi IDE untuk VS Code, Cursor, dan Windsurf, pengalaman cloud/web untuk tugas asinkron yang didelegasikan, dan aplikasi desktop dengan browser internal dan Computer Use."}, {"kind": "steps", "items": [{"label": "Model default", "body": "Per pertengahan 2026, model yang direkomendasikan adalah gpt-5.5, dengan gpt-5.4 sebagai model yang secara eksplisit dilatih OpenAI untuk frontend dan computer use."}, {"label": "File instruksi", "body": "Codex membaca file AGENTS.md di proyek Anda (standar lintas alat) untuk aturan proyek — tempat alami untuk menuliskan konvensi desain Anda."}, {"label": "Sandbox", "body": "Ia berjalan dalam sandbox tingkat kernel (workspace-write secara default), sehingga agen yang menyunting UI Anda tidak dapat berkelana ke luar proyek."}]}, {"kind": "ul", "items": ["Vendor: OpenAI", "Kredensial: kunci API OpenAI (BYOK) atau langganan ChatGPT (Free / Go / Plus / Pro / Business / Enterprise)", "Lisensi CLI: Apache-2.0, open source"]}]}, {"id": "why-design", "heading": "Mengapa Codex sekarang bagus untuk desain", "blocks": [{"kind": "p", "text": "Tiga hal berkonvergensi pada awal 2026 untuk menjadikan Codex alat desain sungguhan, bukan sekadar generator kode generik."}, {"kind": "steps", "items": [{"label": "Model yang dilatih untuk frontend", "body": "OpenAI merilis GPT-5.4, model mainline pertamanya yang dilatih untuk frontend dan computer use, dengan pemahaman gambar yang jauh lebih baik di seluruh alur kerja desain dan verifikasi diri yang lebih kuat. Ia bahkan dapat menghasilkan mood board dan opsi visual sebelum berkomitmen pada aset final."}, {"label": "Skill frontend resmi", "body": "Katalog openai/skills menyediakan frontend-skill terkurasi yang menegakkan selera nyata: layout tanpa card, hero full-bleed, hierarki brand-first, gerak yang terkendali, paling banyak dua typeface dan satu accent color — dan membuat Codex menulis tesis visual sebelum membangun."}, {"label": "Verifikasi browser", "body": "Dengan skill Playwright, Codex membuka browser sungguhan, mengubah ukuran ke breakpoint, dan membandingkan output-nya kembali ke referensi alih-alih hanya memeriksa bahwa build lolos."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Diagram yang menunjukkan design system, skill, dan gambar referensi mengonvergensi menjadi output desain yang baik", "caption": "Selera datang dari tiga masukan yang Anda berikan: design system, skill, dan gambar referensi nyata."}, {"kind": "p", "text": "Pelajaran di balik ketiganya: Codex tidak punya selera secara default. Ia menghasilkan desain yang baik ketika Anda memberinya batasan — design system, skill estetik, dan referensi konkret. Open Design mengemas masukan-masukan itu secara persis, dan itulah mengapa keduanya cocok bersama (lebih lanjut di bawah)."}]}, {"id": "setup", "heading": "Menyiapkan Codex untuk pekerjaan desain, dari nol", "blocks": [{"kind": "p", "text": "Berikut jalur lengkap dari mesin yang bersih hingga Codex yang dapat membangun dan memverifikasi UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Alur penyiapan lima langkah: install, autentikasi, konfigurasi, install skill, verifikasi", "caption": "Urutan penyiapan: install → autentikasi → konfigurasi AGENTS.md → install skill frontend → aktifkan verifikasi browser."}, {"kind": "steps", "items": [{"label": "Tuliskan aturan desain Anda", "body": "Letakkan tokens, primitif, dan konvensi Anda di AGENTS.md atau DESIGN.md dan arahkan Codex ke sana, sehingga output sesuai dengan brand alih-alih jatuh ke tampilan generik."}, {"label": "Pilih tingkat reasoning yang tepat", "body": "OpenAI mencatat bahwa tingkat reasoning rendah hingga sedang sering menghasilkan hasil frontend yang lebih kuat daripada pengaturan tertinggi."}]}]}, {"id": "screenshot-workflow", "heading": "Alur kerja screenshot-to-UI", "blocks": [{"kind": "p", "text": "Loop desain dengan daya ungkit tertinggi pada Codex adalah mengubah gambar referensi menjadi UI yang berfungsi dan responsif, lalu mengiterasinya hingga cocok. Panduan OpenAI sendiri menyaringnya menjadi lima langkah."}, {"kind": "ol", "items": ["Mulai dari referensi visual paling jelas yang Anda miliki — dan sertakan banyak state (desktop dan mobile, hover, kosong, loading), bukan hanya satu hero shot.", "Bersikaplah spesifik dalam prompt; prompt yang samar menghasilkan UI generik.", "Siapkan design system dan beri tahu Codex di mana tokens dan primitif kanonis berada.", "Aktifkan skill interaktif Playwright agar Codex merender di browser sungguhan dan mengubah ukuran ke breakpoint.", "Iterasi dengan meminta Codex membandingkan implementasinya kembali ke screenshot — bukan sekadar memastikan ia berhasil build."]}, {"kind": "p", "text": "Beri gambar dengan menyeret screenshot ke dalam terminal atau dengan flag image, lalu beri prompt dengan batasan konkret:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Jalankan dev server di terminal kedua, jaga prompt tetap kecil dan terfokus, lalu commit iterasi yang baik / revert yang buruk (beri tahu Codex saat Anda revert) sehingga setiap putaran dibangun di atas dasar yang bersih."}]}, {"id": "figma", "heading": "Codex + Figma: round-trip desain ↔ kode", "blocks": [{"kind": "p", "text": "Pada Februari 2026 OpenAI dan Figma mengumumkan kemitraan resmi, mengubah beta Figma MCP sebelumnya menjadi integrasi dwiarah kelas satu. Ia bekerja di kedua arah."}, {"kind": "steps", "items": [{"label": "Desain → Kode", "body": "Salin “link to selection” sebuah frame di Figma, tempelkan ke Codex dengan get_design_context, dan minta ia mengimplementasikan desain menggunakan pustaka komponen Anda yang ada."}, {"label": "Kode → Desain", "body": "Alat generate_figma_design (“Code to Canvas”) mengubah UI yang hidup dan berjalan kembali menjadi frame Figma yang dapat disunting — seluruh layar, elemen terpilih, atau seluruh file."}]}, {"kind": "p", "text": "Figma MCP berjalan sebagai server remote dan dikecualikan dari rate limit. Tambahkan sekali dan ia tersedia untuk Codex, Claude Code, Cursor, VS Code, dan lainnya — persis jenis kemampuan portabel dan multi-agen yang dibuat untuk diorkestrasikan oleh Open Design."}]}, {"id": "vs", "heading": "Codex vs Cursor vs Claude Code untuk desain", "blocks": [{"kind": "p", "text": "Tidak ada pemenang tunggal untuk pekerjaan desain — setiap agen punya kekuatan berbeda, dan tim berpengalaman menumpuknya. Ringkasan yang adil:"}, {"kind": "table", "columns": ["Agen", "Kekuatan desain", "Paling cocok untuk"], "rows": [["Codex", "Poles visual yang kuat setelah GPT-5.4 + frontend-skill; pemahaman gambar", "Build asinkron yang didelegasikan, jalankan tersandbox, aturan AGENTS.md yang portabel"], ["Cursor", "Loop build-and-see visual dengan pratinjau langsung dan suntingan inline", "Pekerjaan UI iterate-and-watch yang rapat di dalam IDE"], ["Claude Code", "Keputusan desain spesifik (hex, spacing, type) dan UX yang sadar codebase", "Penalaran frontend dan refaktor konteks besar"]]}, {"kind": "p", "text": "Putusan komunitas yang berulang adalah bahwa selera datang dari manusia: ketiganya jatuh ke estetika generik tanpa skill, referensi, dan batasan. Itulah masalah sebenarnya yang harus dipecahkan — dan bentuknya seperti alat desain, bukan seperti model."}]}, {"id": "pitfalls", "heading": "Jebakan, dan cara menghindari tampilan “AI slop”", "blocks": [{"kind": "p", "text": "Keluhan paling umum tentang desain hasil Codex adalah tampilannya yang generik — gradien lembut, panel mengambang, sudut membulat berukuran berlebihan, bayangan dramatis, nuansa Inter-dan-ungu yang “berteriak ini buatan AI.” Masalah lain yang dilaporkan termasuk layout mobile yang rusak, instruksi yang bocor ke teks UI, dan cepat mencapai batas penggunaan."}, {"kind": "steps", "items": [{"label": "Install sebuah skill frontend", "body": "Skill estetik terkurasi memaksa Codex berkomitmen pada arah nyata alih-alih tampilan default."}, {"label": "Aktifkan verifikasi Playwright", "body": "Buat Codex merender dan memeriksa diri sendiri di berbagai breakpoint sehingga layout tidak diam-diam rusak di mobile."}, {"label": "Sediakan tokens dan referensi", "body": "Design tokens nyata dan screenshot referensi adalah satu daya ungkit terbesar bagi kualitas output."}, {"label": "Tuliskan aturan di AGENTS.md", "body": "Letakkan aturan bergaya “tanpa hero card, maksimal dua typeface, hierarki brand-first” di tempat yang dibaca agen pada setiap putaran."}]}, {"kind": "p", "text": "Perhatikan bahwa setiap mitigasi adalah soal memberi agen konteks desain yang terkurasi. Memelihara konteks itu secara manual, per proyek, adalah kerja melelahkan yang dihapus Open Design."}]}, {"id": "open-design", "heading": "Mendesain dengan Codex di dalam Open Design", "blocks": [{"kind": "p", "text": "Open Design adalah lapisan desain open-source yang terus diminta oleh alur kerja di atas. Ia memperlakukan Codex sebagai adaptor first-party dan membungkusnya dengan pustaka skill dan design system terkurasi, pipeline render terstruktur, dan UI desktop lokal — sehingga konteks desain yang membuat Codex bagus sudah ada sejak putaran pertama, bukan dirakit secara manual setiap kali."}, {"kind": "ol", "items": ["Install Open Design dan pilih Codex sebagai agen Anda.", "Autentikasi dengan kunci API OpenAI (BYOK) atau langganan ChatGPT Anda — kredensial tetap di mesin Anda dan tidak pernah diproksi melalui kami.", "Pilih design system dan skill, lalu hasilkan deck, prototipe, dan landing page dengan selera yang konsisten.", "Setiap artefak dan file DESIGN.md hidup di repo Anda sendiri, bukan di cloud yang dihosting."]}, {"kind": "p", "text": "Agen Codex yang sama, kunci yang sama — ditambah alur kerja desain open-source yang nyata dan portabel di sekelilingnya. Ia local-first dan Apache-2.0, sehingga tidak ada bagian dari pekerjaan atau kredensial Anda yang meninggalkan mesin Anda."}]}], "faqTitle": "Pertanyaan yang sering diajukan", "faq": [{"name": "Apakah OpenAI Codex benar-benar bisa melakukan pekerjaan desain?", "text": "Ya — dengan skill frontend, design system, dan gambar referensi nyata dalam konteks, Codex (terutama pada GPT-5.4) menghasilkan UI berkualitas produksi dan responsif serta dapat memverifikasinya di browser. Tanpa konteks itu, ia cenderung jatuh ke tampilan generik, dan itulah celah yang diisi Open Design."}, {"name": "Apakah ini plugin Product Design OpenAI Codex?", "text": "Bukan. Open Design adalah proyek open-source independen yang mengintegrasikan Codex sebagai agen. Ia melengkapi tooling OpenAI sendiri dengan pustaka skill dan design system yang terbuka dan local-first."}, {"name": "Apakah saya butuh langganan ChatGPT untuk mendesain dengan Codex?", "text": "Anda dapat menggunakan kunci API OpenAI (BYOK) atau langganan ChatGPT Anda. Masuk dengan ChatGPT umumnya memberi batas yang lebih murah hati; Open Design tidak pernah memproksi kredensial Anda dengan cara apa pun."}, {"name": "Codex atau Claude Code untuk desain frontend?", "text": "Keduanya kuat. Claude Code dikenal karena keputusan desain yang spesifik dan sadar codebase; Codex punya poles visual yang kuat setelah GPT-5.4 dan unggul dalam build yang didelegasikan dan tersandbox. Banyak tim memakai keduanya — Open Design memungkinkan Anda berganti agen tanpa mengubah alur kerja desain Anda."}, {"name": "Bagaimana cara menghubungkan Codex ke Figma?", "text": "Tambahkan server Figma MCP resmi (codex mcp add figma --url https://mcp.figma.com/mcp). Anda kemudian dapat mengimplementasikan frame Figma dalam kode dengan get_design_context dan mendorong UI yang berjalan kembali ke frame Figma yang dapat disunting dengan generate_figma_design."}, {"name": "Bagaimana cara menghindari estetika “AI slop” yang generik?", "text": "Install skill frontend, sediakan design tokens nyata dan screenshot referensi, tuliskan aturan brand di AGENTS.md, dan aktifkan verifikasi Playwright. Open Design menyediakan ini sebagai pustaka terkurasi sehingga Anda melewati penyiapan per proyek."}, {"name": "Apakah Open Design berafiliasi dengan OpenAI?", "text": "Tidak. Codex adalah produk OpenAI; Open Design adalah proyek open-source independen yang mendukungnya sebagai adaptor first-party. OpenAI dan Codex adalah merek dagang OpenAI."}, {"name": "Apakah file dan kredensial saya aman?", "text": "Ya — Open Design bersifat local-first. File, artefak, dan DESIGN.md Anda tetap di repo Anda sendiri, dan kredensial OpenAI Anda digunakan langsung oleh agen Anda, tidak pernah dirutekan melalui server Open Design."}], "ctaTitle": "Mendesain dengan Codex, dengan cara terbuka.", "ctaBody": "Bawa kunci OpenAI Anda sendiri, simpan setiap file secara lokal, dan dapatkan pustaka desain terkurasi di sekeliling agen yang sudah Anda gunakan.", "ctaActions": [{"label": "Gunakan Codex di dalam Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Beri bintang di GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Unduh aplikasi desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Lihat semua agen yang didukung"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor untuk desainer — Open Design", + description: "Bagaimana desainer menggunakan Cursor untuk desain UI dan web — Design Mode, Figma-to-code, Figma MCP — dan bagaimana Open Design mengubah Cursor menjadi agen desain open-source yang local-first.", + breadcrumb: "Cursor", + label: "Agen · Cursor", + heading: "Cursor untuk desainer.", + lead: "Cursor adalah editor kode AI, kini dengan Design Mode visual. Desainer menggunakannya untuk menyunting UI dengan menunjuk dan menggambar, serta untuk mengubah Figma menjadi kode. Open Design menghubungkan Cursor Agent ke alur kerja desain open-source yang menjaga file Anda tetap lokal.", + rich: {"heroCtaLead": "Open Design mengubah Cursor menjadi agen desain open-source yang local-first — akun Cursor atau kunci model Anda, file Anda, dengan pustaka skill dan design system terkurasi di sekelilingnya.", "heroCtaActions": [{"label": "Gunakan Cursor di dalam Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Beri bintang di GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Unduh aplikasi desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor adalah editor kode AI-first yang menjadikan “bangun lalu lihat ia merender” sebagai cara default untuk mengirimkan UI. Dengan mode Agent, suntingan inline, pratinjau di dalam editor, dan Figma lewat MCP, ia telah menjadi alat desain yang sungguhan — begitu Anda memberinya referensi, aturan, dan loop verifikasi yang tepat. Ini adalah panduan praktis end-to-end untuk menggunakan Cursor dalam pekerjaan UI, frontend, dan design system, serta untuk merangkainya ke alur kerja desain terstruktur dengan Open Design.", "Panduan ini membahas apa sebenarnya Cursor itu, mengapa loop iterate-and-watch-nya yang rapat bagus untuk desain, cara menyiapkannya dari nol, loop screenshot-dan-pratinjau-to-UI, round-trip Figma lewat MCP, perbandingannya dengan Codex dan Claude Code, jebakan yang membuat output AI terlihat generik, dan bagaimana Open Design menutup celah itu sebagai lapisan desain terbuka yang local-first."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Konvergensi desain Cursor: editor di kiri, hub skill dan design system terkurasi di tengah dengan mark Cursor di pusat, dan UI yang dirender di kanan", "caption": "Ide intinya: Cursor menyunting dan merender UI di dalam editor, sementara hub desain terkurasi memberinya system, skill, dan referensi yang membuat output terlihat disengaja."}, "tocLabel": "Di halaman ini", "toc": [{"id": "what-is-cursor", "label": "Apa sebenarnya Cursor itu"}, {"id": "why-design", "label": "Mengapa Cursor bagus untuk desain"}, {"id": "setup", "label": "Menyiapkan Cursor untuk desain (dari nol)"}, {"id": "preview-workflow", "label": "Alur kerja preview-to-UI"}, {"id": "figma", "label": "Cursor + Figma lewat MCP"}, {"id": "vs", "label": "Cursor vs Codex vs Claude Code"}, {"id": "pitfalls", "label": "Jebakan dan tampilan “AI slop”"}, {"id": "open-design", "label": "Mendesain dengan Cursor di Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-cursor", "heading": "Apa sebenarnya Cursor itu", "blocks": [{"kind": "p", "text": "Cursor adalah editor kode AI-first yang dibangun oleh Anysphere. Ia adalah fork dari VS Code, sehingga tetap mempertahankan editor, ekstensi, dan keybinding yang familier, tetapi membangun ulang alur kerja di seputar agen AI yang dapat membaca seluruh proyek Anda, menyunting banyak file, menjalankan perintah, dan mengiterasi bersama Anda dalam loop."}, {"kind": "p", "text": "Untuk pekerjaan desain, permukaan yang penting adalah mode Agent (Anda mendeskripsikan hasil dan Cursor merencanakan serta menyunting di banyak file), suntingan inline dan penyelesaian Tab untuk perubahan cepat, pratinjau / browser di dalam editor agar Anda bisa melihat UI yang berjalan tanpa meninggalkan jendela, serta dukungan MCP yang membuatnya dapat menarik konteks eksternal seperti file Figma yang hidup."}, {"kind": "steps", "items": [{"label": "Aturan proyek", "body": "Cursor membaca file instruksi proyek — aturan `.mdc` yang berversi di bawah `.cursor/rules`, dan `AGENTS.md` biasa — sehingga Anda dapat menuliskan konvensi desain di tempat yang dibaca agen pada setiap putaran."}, {"label": "Model", "body": "Cursor fleksibel soal model: ia hadir dengan model-model terdepan melalui langganan Anda dan juga mendukung membawa kunci model Anda sendiri, sehingga Anda memilih mesin di balik alur kerja editor yang sama."}, {"label": "MCP", "body": "Ia berbicara Model Context Protocol, sehingga server eksternal — yang paling relevan server Figma MCP — menjadi konteks kelas satu bagi agen."}]}, {"kind": "ul", "items": ["Vendor: Anysphere", "Kredensial: akun / langganan Cursor (Hobby / Pro / Business) atau kunci model Anda sendiri (BYOK)", "Bentuk: editor kode AI-first (fork VS Code) dengan agen dan pratinjau di dalam editor"]}]}, {"id": "why-design", "heading": "Mengapa Cursor bagus untuk desain", "blocks": [{"kind": "p", "text": "Keunggulan desain Cursor bukan satu fitur tunggal — melainkan kerapatan loop build-and-see. Tiga hal membuatnya terasa seperti alat desain alih-alih generator kode generik."}, {"kind": "steps", "items": [{"label": "Loop iterate-and-watch yang rapat", "body": "Anda memberi prompt, Cursor menyunting di banyak file, dan pratinjau di dalam editor merender hasilnya seketika — sehingga Anda menyesuaikan spacing, hierarki, dan gerak dalam hitungan detik alih-alih bolak-balik melalui terminal dan browser terpisah."}, {"label": "Penyuntingan visual langsung", "body": "Selain chat, Cursor memungkinkan Anda memilih elemen di pratinjau dan menyetel gaya, sehingga koreksi visual kecil terasa seperti suntingan desain alih-alih arkeologi kode."}, {"label": "Aturan proyek dan konteks MCP", "body": "Dengan `.cursor/rules` (atau `AGENTS.md`) dan server Figma MCP, agen bekerja terhadap tokens, komponen, dan spesifikasi desain nyata Anda alih-alih menebak."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Diagram yang menunjukkan design system, skill, dan gambar referensi mengonvergensi menjadi output desain yang baik", "caption": "Selera datang dari tiga masukan yang Anda berikan: design system, skill, dan gambar referensi nyata."}, {"kind": "p", "text": "Pelajarannya sama dengan yang diajarkan setiap agen: Cursor tidak punya selera secara default. Ia menghasilkan desain yang baik ketika Anda memberinya batasan — design system, skill estetik, dan referensi konkret. Open Design mengemas masukan-masukan itu secara persis, dan itulah mengapa keduanya cocok bersama (lebih lanjut di bawah)."}]}, {"id": "setup", "heading": "Menyiapkan Cursor untuk pekerjaan desain, dari nol", "blocks": [{"kind": "p", "text": "Berikut jalur lengkap dari mesin yang bersih hingga Cursor yang dapat membangun, mempratinjau, dan memverifikasi UI terhadap design system Anda."}, {"kind": "ol", "items": ["Install Cursor dari cursor.com dan masuk dengan akun Cursor Anda, atau konfigurasikan kunci model Anda sendiri (BYOK) di Settings.", "Buka proyek Anda dan pilih model di panel chat / Agent.", "Tambahkan aturan proyek: buat `.cursor/rules/*.mdc` untuk konvensi terstruktur yang bercakupan glob, atau `AGENTS.md` biasa untuk instruksi yang sederhana dan mudah dibaca.", "Hubungkan server Figma MCP (opsional) agar agen dapat membaca konteks desain yang hidup.", "Jalankan dev server Anda dan gunakan pratinjau di dalam editor untuk melihat dan memverifikasi UI saat Anda mengiterasi."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Alur penyiapan lima langkah: install, autentikasi, konfigurasi aturan, tambah skill, verifikasi", "caption": "Urutan penyiapan: install → autentikasi → konfigurasi aturan proyek → tambahkan skill → aktifkan verifikasi pratinjau."}, {"kind": "p", "text": "File aturan-proyek minimal membuat agen mendesain ke sebuah brand alih-alih jatuh ke tampilan generik. Letakkan di tempat yang dibaca Cursor pada setiap putaran:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Tuliskan aturan desain Anda", "body": "Letakkan tokens, primitif, dan konvensi Anda di `.cursor/rules` atau `AGENTS.md` dan arahkan Cursor ke sana, sehingga output sesuai dengan brand alih-alih jatuh ke tampilan generik."}, {"label": "Jaga prompt tetap kecil", "body": "Loop Cursor yang rapat memberi imbalan pada permintaan yang terfokus — iterasi satu komponen atau state pada satu waktu dan amati pratinjau di antara putaran."}]}]}, {"id": "preview-workflow", "heading": "Alur kerja preview-to-UI", "blocks": [{"kind": "p", "text": "Loop desain dengan daya ungkit tertinggi pada Cursor adalah mengubah referensi menjadi UI yang berfungsi dan responsif, lalu mengiterasinya di dalam editor hingga cocok — mengamati pratinjau langsung sepanjang waktu alih-alih menebak."}, {"kind": "ol", "items": ["Mulai dari referensi visual paling jelas yang Anda miliki — dan sertakan banyak state (desktop dan mobile, hover, kosong, loading), bukan hanya satu hero shot.", "Bersikaplah spesifik dalam prompt; prompt yang samar menghasilkan UI generik.", "Siapkan design system dan beri tahu Cursor di mana tokens dan primitif kanonis berada.", "Jaga pratinjau di dalam editor tetap terbuka dan dev server Anda tetap berjalan agar setiap suntingan dirender seketika pada breakpoint yang Anda pedulikan.", "Iterasi dengan membandingkan UI yang dirender kembali ke referensi — dan gunakan pemilihan elemen langsung di pratinjau untuk koreksi visual kecil."]}, {"kind": "p", "text": "Beri referensi dengan melampirkan gambar ke chat, lalu beri prompt dengan batasan konkret:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Commit iterasi yang baik dan revert yang buruk (beri tahu Cursor saat Anda revert) sehingga setiap putaran dibangun di atas dasar yang bersih — disiplin yang sama yang menjaga loop agen mana pun agar tidak menyimpang."}]}, {"id": "figma", "heading": "Cursor + Figma: desain ↔ kode lewat MCP", "blocks": [{"kind": "p", "text": "Cursor terhubung ke Figma melalui server Figma MCP resmi, yang memberi agen akses terstruktur ke file Figma yang hidup alih-alih screenshot datar. Itu menghilangkan tebak-tebakan dari handoff."}, {"kind": "steps", "items": [{"label": "Desain → Kode", "body": "Salin tautan sebuah frame di Figma, tempelkan ke Cursor, dan minta ia mengimplementasikan desain. Server MCP mengekspos konteks desain nyata — komponen, variabel, data layout, tokens — sehingga kode yang dihasilkan cocok dengan sumber alih-alih mendekatinya."}, {"label": "Tetap selaras", "body": "Dengan design tokens, gaya, dan komponen yang digunakan secara konsisten di Figma (dan Code Connect bila tersedia), output Cursor tetap terpetakan ke design system nyata Anda alih-alih menciptakan ulang primitif."}]}, {"kind": "p", "text": "Siapkan server Figma MCP remote sekali dan ia tersedia bagi Cursor sebagai konteks kelas satu. Karena MCP adalah standar terbuka, server yang sama dapat dipakai ulang di Cursor, Claude Code, Codex, dan VS Code — persis jenis kemampuan portabel dan multi-agen yang dibuat untuk diorkestrasikan oleh Open Design."}]}, {"id": "vs", "heading": "Cursor vs Codex vs Claude Code untuk desain", "blocks": [{"kind": "p", "text": "Tidak ada pemenang tunggal untuk pekerjaan desain — setiap agen punya kekuatan berbeda, dan tim berpengalaman menumpuknya. Ringkasan yang adil:"}, {"kind": "table", "columns": ["Agen", "Kekuatan desain", "Paling cocok untuk"], "rows": [["Cursor", "Loop build-and-see visual dengan pratinjau langsung di dalam editor dan penyuntingan elemen langsung", "Pekerjaan UI iterate-and-watch yang rapat di dalam IDE"], ["Codex", "Poles visual yang kuat dengan skill frontend; pemahaman gambar dan jalankan tersandbox", "Build asinkron yang didelegasikan dan aturan AGENTS.md yang portabel"], ["Claude Code", "Keputusan desain spesifik (hex, spacing, type) dan UX yang sadar codebase", "Penalaran frontend dan refaktor konteks besar"]]}, {"kind": "p", "text": "Putusan komunitas yang berulang adalah bahwa selera datang dari manusia: ketiganya jatuh ke estetika generik tanpa skill, referensi, dan batasan. Itulah masalah sebenarnya yang harus dipecahkan — dan bentuknya seperti alat desain, bukan seperti model."}]}, {"id": "pitfalls", "heading": "Jebakan, dan cara menghindari tampilan “AI slop”", "blocks": [{"kind": "p", "text": "Keluhan paling umum tentang desain hasil Cursor adalah tampilannya yang generik — gradien lembut, panel mengambang, sudut membulat berukuran berlebihan, bayangan dramatis, nuansa Inter-dan-ungu yang “berteriak ini buatan AI.” Masalah lain yang dilaporkan termasuk layout yang rusak di mobile dan instruksi yang bocor ke teks UI."}, {"kind": "steps", "items": [{"label": "Tambahkan sebuah skill desain", "body": "Skill estetik terkurasi memaksa Cursor berkomitmen pada arah nyata alih-alih tampilan default."}, {"label": "Gunakan pratinjau untuk verifikasi", "body": "Render dan periksa diri sendiri di berbagai breakpoint di pratinjau dalam editor sehingga layout tidak diam-diam rusak di mobile."}, {"label": "Sediakan tokens dan referensi", "body": "Design tokens nyata dan screenshot referensi adalah satu daya ungkit terbesar bagi kualitas output."}, {"label": "Tuliskan aturan di `.cursor/rules`", "body": "Letakkan aturan bergaya “tanpa hero card, maksimal dua typeface, hierarki brand-first” di tempat yang dibaca agen pada setiap putaran."}]}, {"kind": "p", "text": "Perhatikan bahwa setiap mitigasi adalah soal memberi agen konteks desain yang terkurasi. Memelihara konteks itu secara manual, per proyek, adalah kerja melelahkan yang dihapus Open Design."}]}, {"id": "open-design", "heading": "Mendesain dengan Cursor di dalam Open Design", "blocks": [{"kind": "p", "text": "Open Design adalah lapisan desain open-source yang terus diminta oleh alur kerja di atas. Ia memperlakukan Cursor sebagai adaptor first-party dan membungkusnya dengan pustaka skill dan design system terkurasi, pipeline render terstruktur, dan UI desktop lokal — sehingga konteks desain yang membuat Cursor bagus sudah ada sejak putaran pertama, bukan dirakit secara manual setiap kali."}, {"kind": "ol", "items": ["Install Open Design dan pilih Cursor sebagai agen Anda.", "Autentikasi dengan akun Cursor Anda atau kunci model Anda sendiri (BYOK) — kredensial tetap di mesin Anda dan tidak pernah diproksi melalui kami.", "Pilih design system dan skill, lalu hasilkan deck, prototipe, dan landing page dengan selera yang konsisten.", "Setiap artefak dan file DESIGN.md hidup di repo Anda sendiri, bukan di cloud yang dihosting."]}, {"kind": "p", "text": "Agen Cursor yang sama, kunci yang sama — ditambah alur kerja desain open-source yang nyata dan portabel di sekelilingnya. Ia local-first dan Apache-2.0, sehingga tidak ada bagian dari pekerjaan atau kredensial Anda yang meninggalkan mesin Anda."}]}], "faqTitle": "Pertanyaan yang sering diajukan", "faq": [{"name": "Apakah Cursor benar-benar bisa melakukan pekerjaan desain?", "text": "Ya — dengan skill desain, design system, dan gambar referensi nyata dalam konteks, Cursor menghasilkan UI berkualitas produksi dan responsif, dan pratinjau di dalam editornya memungkinkan Anda memverifikasi serta menyempurnakannya secara visual. Tanpa konteks itu, ia cenderung jatuh ke tampilan generik, dan itulah celah yang diisi Open Design."}, {"name": "Apakah ini produk Cursor resmi?", "text": "Bukan. Open Design adalah proyek open-source independen yang mengintegrasikan Cursor sebagai agen. Ia melengkapi Cursor dengan pustaka skill dan design system yang terbuka dan local-first."}, {"name": "Apakah saya butuh langganan Cursor untuk mendesain dengan Cursor?", "text": "Anda dapat menggunakan akun / langganan Cursor atau membawa kunci model Anda sendiri (BYOK). Open Design tidak pernah memproksi kredensial Anda dengan cara apa pun — kredensial digunakan langsung oleh agen Anda."}, {"name": "Cursor atau Claude Code untuk desain frontend?", "text": "Keduanya kuat. Claude Code dikenal karena keputusan desain yang spesifik dan sadar codebase; keunggulan Cursor adalah loop build-and-see-nya yang rapat dengan pratinjau langsung di dalam editor. Banyak tim memakai keduanya — Open Design memungkinkan Anda berganti agen tanpa mengubah alur kerja desain Anda."}, {"name": "Bagaimana cara menghubungkan Cursor ke Figma?", "text": "Tambahkan server Figma MCP resmi di Cursor, lalu tempelkan tautan frame Figma ke chat dan minta Cursor mengimplementasikannya. Server mengekspos komponen, variabel, dan data layout nyata sehingga kode yang dihasilkan cocok dengan desain sumber."}, {"name": "Bagaimana cara menghindari estetika “AI slop” yang generik?", "text": "Tambahkan skill desain, sediakan design tokens nyata dan screenshot referensi, tuliskan aturan brand di `.cursor/rules` atau `AGENTS.md`, dan verifikasi di berbagai breakpoint di pratinjau. Open Design menyediakan ini sebagai pustaka terkurasi sehingga Anda melewati penyiapan per proyek."}, {"name": "Apakah Open Design berafiliasi dengan Cursor atau Anysphere?", "text": "Tidak. Cursor adalah produk Anysphere; Open Design adalah proyek open-source independen yang mendukungnya sebagai adaptor first-party. Cursor dan Anysphere adalah merek dagang Anysphere, Inc."}, {"name": "Apakah file dan kredensial saya aman?", "text": "Ya — Open Design bersifat local-first. File, artefak, dan DESIGN.md Anda tetap di repo Anda sendiri, dan kredensial Cursor atau model Anda digunakan langsung oleh agen Anda, tidak pernah dirutekan melalui server Open Design."}], "ctaTitle": "Mendesain dengan Cursor, dengan cara terbuka.", "ctaBody": "Bawa akun Cursor atau kunci model Anda sendiri, simpan setiap file secara lokal, dan dapatkan pustaka desain terkurasi di sekeliling agen yang sudah Anda gunakan.", "ctaActions": [{"label": "Gunakan Cursor di dalam Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Beri bintang di GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Unduh aplikasi desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Lihat semua agen yang didukung"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode untuk desain — Open Design", + description: "Bagaimana orang menggunakan OpenCode untuk desain UI dan web — file design.md, skill UI/UX, Figma MCP — dan bagaimana Open Design mengubah OpenCode menjadi agen desain open-source yang local-first.", + breadcrumb: "OpenCode", + label: "Agen · OpenCode", + heading: "OpenCode untuk desain.", + lead: "OpenCode adalah agen coding AI terminal yang open-source. Desainer memasangkan skill desain dan file DESIGN.md padanya untuk menghasilkan UI sungguhan. Open Design menjadikannya alur kerja open-source yang terstruktur — bawa kunci provider Anda, simpan semuanya secara lokal.", + rich: {"heroCtaLead": "Open Design mengubah OpenCode menjadi agen desain open-source yang local-first — model apa pun yang Anda pilih dengan kunci provider Anda sendiri, file Anda, dengan pustaka skill dan design system terkurasi di sekelilingnya.", "heroCtaActions": [{"label": "Gunakan OpenCode di dalam Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Beri bintang di GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Unduh aplikasi desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode adalah agen coding AI yang open-source dan mengutamakan terminal, yang sengaja dibuat model-agnostic: Anda membawa kunci provider Anda sendiri dan menjalankan model apa pun yang Anda inginkan di balik alur kerja yang sama. Keterbukaan itu menjadikannya basis alami untuk pekerjaan desain — tetapi seperti setiap agen, ia hanya menghasilkan UI yang baik ketika Anda memberinya referensi, skill, dan loop verifikasi yang tepat. Ini adalah panduan praktis end-to-end untuk menggunakan OpenCode dalam pekerjaan UI, frontend, dan design system, serta untuk merangkainya ke alur kerja desain terstruktur dengan Open Design.", "Panduan ini membahas apa sebenarnya OpenCode itu, mengapa agen terbuka yang model-agnostic cocok untuk desain, cara menyiapkannya dari nol, loop screenshot-to-UI, bagaimana AGENTS.md dan MCP memperluasnya, perbandingannya dengan Codex, Claude Code, dan Cursor, jebakan yang membuat output AI terlihat generik, dan bagaimana Open Design menutup celah itu sebagai lapisan desain terbuka yang local-first — sebuah pasangan alami, karena kedua proyek bersifat open-source dan berjalan di mesin Anda sendiri."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "Loop umpan balik desain OpenCode: agen TUI terminal, browser yang merender UI, dan workspace, dengan panah umpan balik yang berputar kembali", "caption": "Loop inti: OpenCode membangun UI di terminal, merender dan memverifikasinya di browser sungguhan, lalu mengiterasinya terhadap referensi Anda — pada model apa pun yang Anda pilih."}, "tocLabel": "Di halaman ini", "toc": [{"id": "what-is-opencode", "label": "Apa sebenarnya OpenCode itu"}, {"id": "why-design", "label": "Mengapa agen terbuka apa-pun-modelnya cocok untuk desain"}, {"id": "setup", "label": "Menyiapkan OpenCode untuk desain (dari nol)"}, {"id": "screenshot-workflow", "label": "Alur kerja screenshot-to-UI"}, {"id": "extend", "label": "AGENTS.md, MCP, dan sesi yang dapat dibagikan"}, {"id": "vs", "label": "OpenCode vs Codex vs Claude Code vs Cursor"}, {"id": "pitfalls", "label": "Jebakan dan tampilan “AI slop”"}, {"id": "open-design", "label": "Mendesain dengan OpenCode di Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-opencode", "heading": "Apa sebenarnya OpenCode itu", "blocks": [{"kind": "p", "text": "OpenCode adalah agen coding AI open-source yang dibangun untuk terminal, dipelihara oleh tim di balik SST (Anomaly Innovations). Ia membaca repositori Anda, menjalankan perintah, menyunting file, dan berbicara dengan model bahasa besar — tetapi tidak seperti agen yang terikat vendor, ia tidak menyertakan modelnya sendiri. Anda mengarahkannya ke provider dan model apa pun yang Anda inginkan dan membawa kunci Anda sendiri."}, {"kind": "p", "text": "Ia berjalan sebagai terminal UI (TUI), dengan aplikasi desktop dan ekstensi IDE di atas mesin yang sama. Di balik layar, ia menggunakan arsitektur client/server, sehingga agen yang melakukan pekerjaan terpisah dari permukaan tempat Anda mengendalikannya. Dua agen bawaan — build dan plan — berganti dengan tombol Tab."}, {"kind": "steps", "items": [{"label": "Model-agnostic", "body": "Model dan provider berasal dari models.dev, sebuah katalog terbuka. Anda mengonfigurasikannya di opencode.json dengan string provider/model-id dan dapat menonaktifkan provider yang tidak ingin dimuat — sehingga alur kerja desain yang sama berjalan di Anthropic, OpenAI, Google, OpenRouter, model lokal, dan lainnya."}, {"label": "File instruksi", "body": "OpenCode membaca file AGENTS.md di proyek Anda (standar lintas alat, juga kompatibel dengan CLAUDE.md) untuk aturan proyek — tempat alami untuk menuliskan konvensi desain Anda. Jalankan /init untuk menghasilkannya."}, {"label": "Dapat diperluas", "body": "Ia mendukung integrasi LSP, server MCP, tema, keybind, dan perintah kustom, ditambah tautan sesi yang dapat dibagikan untuk kolaborasi."}]}, {"kind": "ul", "items": ["Pemelihara: SST / Anomaly Innovations (proyek open-source)", "Kredensial: kunci API provider model Anda sendiri — BYOK, tanpa vendor lock-in", "Lisensi: MIT, open source"]}]}, {"id": "why-design", "heading": "Mengapa agen terbuka apa-pun-modelnya cocok untuk pekerjaan desain", "blocks": [{"kind": "p", "text": "OpenCode tidak punya satu “model desain” seperti agen vendor — dan itulah intinya. Karena ia model-agnostic dan terbuka, Anda dapat menjalankan alur kerja desain yang sama pada model mana pun yang saat ini terbaik di frontend, menukarnya nanti, atau beralih ke model lokal, semua tanpa mengubah penyiapan Anda."}, {"kind": "p", "text": "Tetapi pilihan model saja tidak membeli selera. Seperti setiap agen coding, OpenCode menghasilkan UI generik kecuali Anda memberinya batasan. Output desain yang baik datang dari tiga masukan yang Anda berikan."}, {"kind": "steps", "items": [{"label": "Sebuah design system", "body": "Tokens, primitif, dan konvensi nyata yang digunakan kembali oleh agen, sehingga output sesuai dengan brand alih-alih jatuh ke tampilan generik."}, {"label": "Sebuah skill estetik", "body": "Skill terkurasi yang menegakkan selera nyata — gerak yang terkendali, hierarki brand-first, paling banyak dua typeface dan satu accent color — dan membuat agen berkomitmen pada arah sebelum membangun."}, {"label": "Referensi konkret", "body": "Gambar referensi nyata dan banyak state (desktop dan mobile, hover, kosong, loading), bukan satu hero shot."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Diagram yang menunjukkan design system, skill, dan gambar referensi mengonvergensi menjadi output desain yang baik", "caption": "Selera datang dari tiga masukan yang Anda berikan: design system, skill, dan gambar referensi nyata — terlepas dari model mana yang Anda jalankan."}, {"kind": "p", "text": "Pelajarannya: OpenCode memberi Anda kebebasan model, tetapi selera tetap datang dari konteks desain yang terkurasi. Open Design mengemas masukan-masukan itu secara persis, dan itulah mengapa keduanya cocok bersama — keduanya open-source dan local-first (lebih lanjut di bawah)."}]}, {"id": "setup", "heading": "Menyiapkan OpenCode untuk pekerjaan desain, dari nol", "blocks": [{"kind": "p", "text": "Berikut jalur lengkap dari mesin yang bersih hingga OpenCode yang dapat membangun dan memverifikasi UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Alur penyiapan lima langkah: install, autentikasi dengan kunci provider Anda, konfigurasi AGENTS.md, tambah skill, verifikasi", "caption": "Urutan penyiapan: install → autentikasi (kunci provider Anda) → konfigurasi AGENTS.md → tambahkan skill → verifikasi di browser sungguhan."}, {"kind": "steps", "items": [{"label": "Tuliskan aturan desain Anda", "body": "Letakkan tokens, primitif, dan konvensi Anda di AGENTS.md (atau DESIGN.md yang dirujuk darinya) sehingga output sesuai dengan brand alih-alih jatuh ke tampilan generik. Opsi instructions di opencode.json dapat mengarah ke file aturan tambahan via glob."}, {"label": "Pilih model yang mumpuni", "body": "Karena OpenCode model-agnostic, pilih provider/model mana pun yang saat ini paling kuat di frontend untuk putaran desain — dan biarkan sisa alur kerja Anda tetap tidak berubah."}]}]}, {"id": "screenshot-workflow", "heading": "Alur kerja screenshot-to-UI", "blocks": [{"kind": "p", "text": "Loop desain dengan daya ungkit tertinggi pada agen mana pun adalah mengubah gambar referensi menjadi UI yang berfungsi dan responsif, lalu mengiterasinya hingga cocok. Bentuk lima langkah yang sama berlaku di OpenCode."}, {"kind": "ol", "items": ["Mulai dari referensi visual paling jelas yang Anda miliki — dan sertakan banyak state (desktop dan mobile, hover, kosong, loading), bukan hanya satu hero shot.", "Bersikaplah spesifik dalam prompt; prompt yang samar menghasilkan UI generik.", "Siapkan design system dan beri tahu OpenCode di mana tokens dan primitif kanonis berada (di AGENTS.md).", "Jalankan dev server dan minta agen merender di browser sungguhan, mengubah ukuran ke breakpoint untuk memeriksa hasilnya.", "Iterasi dengan meminta OpenCode membandingkan implementasinya kembali ke screenshot — bukan sekadar memastikan ia berhasil build."]}, {"kind": "p", "text": "Rujuk file dengan @ di TUI untuk pencarian fuzzy direktori kerja Anda, jalankan perintah shell secara inline dengan awalan !, dan kendalikan tindakan dengan perintah /. Lalu beri prompt dengan batasan konkret:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Jaga prompt tetap kecil dan terfokus, commit iterasi yang baik dan revert yang buruk (beri tahu OpenCode saat Anda revert), sehingga setiap putaran dibangun di atas dasar yang bersih."}]}, {"id": "extend", "heading": "AGENTS.md, MCP, dan sesi yang dapat dibagikan", "blocks": [{"kind": "p", "text": "Tiga titik ekstensi membuat OpenCode praktis untuk pekerjaan desain yang berkelanjutan, dan ketiganya terpetakan rapi ke alur kerja desain terbuka."}, {"kind": "steps", "items": [{"label": "Aturan AGENTS.md", "body": "Aturan proyek tinggal di sebuah AGENTS.md di root repo (atau aturan global di ~/.config/opencode/AGENTS.md). Ia adalah rumah yang tahan lama bagi konvensi desain Anda, dibaca pada setiap putaran, dan kompatibel dengan file CLAUDE.md yang dipakai agen lain."}, {"label": "Server MCP", "body": "OpenCode mendukung server MCP lokal (command) maupun remote (URL), dikonfigurasikan di bawah kunci mcp — cara portabel untuk membawa konteks desain dan alat eksternal yang bekerja lintas agen, bukan hanya OpenCode."}, {"label": "Sesi yang dapat dibagikan", "body": "Perintah /share membuat tautan publik ke sebuah percakapan untuk kolaborasi atau tinjauan, dan /unshare mencabutnya — berguna untuk mendapatkan umpan balik atas sebuah putaran desain."}]}, {"kind": "p", "text": "Ini adalah kemampuan portabel dan multi-agen — persis jenis hal yang dibuat untuk diorkestrasikan oleh Open Design, alih-alih dibuat ulang per proyek."}]}, {"id": "vs", "heading": "OpenCode vs Codex vs Claude Code vs Cursor untuk desain", "blocks": [{"kind": "p", "text": "Tidak ada pemenang tunggal untuk pekerjaan desain — setiap agen punya kekuatan berbeda, dan tim berpengalaman menumpuknya. Ringkasan yang adil:"}, {"kind": "table", "columns": ["Agen", "Kekuatan desain", "Paling cocok untuk"], "rows": [["OpenCode", "Open-source dan model-agnostic; jalankan provider apa pun di balik satu alur kerja terminal", "Kebebasan BYOK, pergantian model, penyiapan yang sepenuhnya terbuka dan local-first"], ["Codex", "Poles visual yang kuat dengan skill frontend; pemahaman gambar", "Asinkron yang didelegasikan, build tersandbox, aturan AGENTS.md yang portabel"], ["Claude Code", "Keputusan desain spesifik (hex, spacing, type) dan UX yang sadar codebase", "Penalaran frontend dan refaktor konteks besar"], ["Cursor", "Loop build-and-see visual dengan pratinjau langsung dan suntingan inline", "Pekerjaan UI iterate-and-watch yang rapat di dalam IDE"]]}, {"kind": "p", "text": "Putusan komunitas yang berulang adalah bahwa selera datang dari manusia: semuanya jatuh ke estetika generik tanpa skill, referensi, dan batasan. Itulah masalah sebenarnya yang harus dipecahkan — dan bentuknya seperti alat desain, bukan seperti model, yang justru menjadi alasan mengapa agen terbuka seperti OpenCode berpasangan begitu baik dengan lapisan desain terbuka."}]}, {"id": "pitfalls", "heading": "Jebakan, dan cara menghindari tampilan “AI slop”", "blocks": [{"kind": "p", "text": "Keluhan paling umum tentang desain hasil AI adalah tampilannya yang generik — gradien lembut, panel mengambang, sudut membulat berukuran berlebihan, bayangan dramatis, nuansa Inter-dan-ungu yang “berteriak ini buatan AI.” Masalah lain yang dilaporkan termasuk layout mobile yang rusak dan instruksi yang bocor ke teks UI. Tak satu pun dari ini unik bagi OpenCode; semuanya terjadi ketika agen mana pun berjalan tanpa konteks desain yang terkurasi."}, {"kind": "steps", "items": [{"label": "Tambahkan sebuah skill estetik", "body": "Skill desain terkurasi memaksa agen berkomitmen pada arah nyata alih-alih tampilan default."}, {"label": "Verifikasi di browser sungguhan", "body": "Render dan periksa diri sendiri di berbagai breakpoint sehingga layout tidak diam-diam rusak di mobile."}, {"label": "Sediakan tokens dan referensi", "body": "Design tokens nyata dan screenshot referensi adalah satu daya ungkit terbesar bagi kualitas output."}, {"label": "Tuliskan aturan di AGENTS.md", "body": "Letakkan aturan bergaya “tanpa hero card, maksimal dua typeface, hierarki brand-first” di tempat yang dibaca agen pada setiap putaran."}]}, {"kind": "p", "text": "Perhatikan bahwa setiap mitigasi adalah soal memberi agen konteks desain yang terkurasi — terlepas dari model mana yang Anda jalankan. Memelihara konteks itu secara manual, per proyek, adalah kerja melelahkan yang dihapus Open Design."}]}, {"id": "open-design", "heading": "Mendesain dengan OpenCode di dalam Open Design", "blocks": [{"kind": "p", "text": "Open Design adalah lapisan desain open-source yang terus diminta oleh alur kerja di atas. Ia memperlakukan OpenCode sebagai adaptor first-party dan membungkusnya dengan pustaka skill dan design system terkurasi, pipeline render terstruktur, dan UI desktop lokal — sehingga konteks desain yang membuat agen mana pun bagus sudah ada sejak putaran pertama, bukan dirakit secara manual setiap kali. Kedua proyek bersifat open-source dan local-first, yang menjadikan pasangan ini cocok secara alami."}, {"kind": "ol", "items": ["Install Open Design dan pilih OpenCode sebagai agen Anda.", "Autentikasi dengan kunci API provider model Anda sendiri (BYOK) — kredensial tetap di mesin Anda dan tidak pernah diproksi melalui kami.", "Pilih provider dan model apa pun, plus design system dan skill, lalu hasilkan deck, prototipe, dan landing page dengan selera yang konsisten.", "Setiap artefak dan file DESIGN.md hidup di repo Anda sendiri, bukan di cloud yang dihosting."]}, {"kind": "p", "text": "Agen OpenCode yang sama, kebebasan model yang sama — ditambah alur kerja desain open-source yang nyata dan portabel di sekelilingnya. Ia local-first dan Apache-2.0, sehingga tidak ada bagian dari pekerjaan atau kredensial Anda yang meninggalkan mesin Anda."}]}], "faqTitle": "Pertanyaan yang sering diajukan", "faq": [{"name": "Apakah OpenCode benar-benar bisa melakukan pekerjaan desain?", "text": "Ya — dengan skill estetik, design system, dan gambar referensi nyata dalam konteks, OpenCode menghasilkan UI berkualitas produksi dan responsif serta dapat memverifikasinya di browser. Karena ia model-agnostic, Anda menjalankan model mana pun yang saat ini terbaik di frontend. Tanpa konteks terkurasi itu, ia cenderung jatuh ke tampilan generik, dan itulah celah yang diisi Open Design."}, {"name": "Model mana yang sebaiknya saya gunakan dengan OpenCode untuk desain?", "text": "Mana pun yang Anda suka — OpenCode bersifat provider-agnostic via models.dev, sehingga Anda dapat menjalankan Anthropic, OpenAI, Google, OpenRouter, atau model lokal di balik alur kerja yang sama dan beralih kapan saja. Kualitas output desain jauh lebih bergantung pada skill, design system, dan referensi Anda daripada pada modelnya saja."}, {"name": "Apakah Open Design dibuat oleh tim OpenCode (SST)?", "text": "Bukan. Open Design adalah proyek open-source independen yang mengintegrasikan OpenCode sebagai agen. Ia melengkapi OpenCode dengan pustaka skill dan design system yang terbuka dan local-first."}, {"name": "Apakah saya butuh langganan khusus untuk mendesain dengan OpenCode?", "text": "Tidak — OpenCode bersifat BYOK. Anda membawa kunci API provider model Anda sendiri, dan Open Design tidak pernah memproksi kredensial Anda. Tidak ada vendor lock-in."}, {"name": "OpenCode atau Codex atau Claude Code untuk desain frontend?", "text": "Semuanya kuat, dan banyak tim menumpuknya. Keunggulan OpenCode adalah sepenuhnya open-source dan model-agnostic; Codex unggul dalam build yang didelegasikan dan tersandbox; Claude Code dikenal karena keputusan desain yang spesifik dan sadar codebase. Open Design memungkinkan Anda berganti agen tanpa mengubah alur kerja desain Anda."}, {"name": "Bagaimana cara memperluas OpenCode untuk konteks desain?", "text": "Tuliskan aturan di AGENTS.md, tambahkan server MCP di bawah kunci mcp untuk alat portabel dan konteks desain, serta gunakan sesi yang dapat dibagikan untuk tinjauan. Open Design menyediakan pustaka skill dan design system terkurasi sehingga Anda melewati penyiapan per proyek."}, {"name": "Apakah Open Design berafiliasi dengan OpenCode atau SST?", "text": "Tidak. OpenCode adalah proyek open-source yang dipelihara oleh SST (Anomaly Innovations); Open Design adalah proyek open-source independen yang mendukungnya sebagai adaptor first-party."}, {"name": "Apakah file dan kredensial saya aman?", "text": "Ya — Open Design bersifat local-first. File, artefak, dan DESIGN.md Anda tetap di repo Anda sendiri, dan kredensial provider model Anda digunakan langsung oleh agen Anda, tidak pernah dirutekan melalui server Open Design."}], "ctaTitle": "Mendesain dengan OpenCode, dengan cara terbuka.", "ctaBody": "Bawa kunci provider model Anda sendiri, simpan setiap file secara lokal, dan dapatkan pustaka desain terkurasi di sekeliling agen terbuka yang sudah Anda gunakan.", "ctaActions": [{"label": "Gunakan OpenCode di dalam Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Beri bintang di GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Unduh aplikasi desktop", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Lihat semua agen yang didukung"}, + }, + }, + }; +} diff --git a/apps/landing-page/app/agent-guides.part-d.i18n.ts b/apps/landing-page/app/agent-guides.part-d.i18n.ts new file mode 100644 index 0000000000..3ad3a80eb7 --- /dev/null +++ b/apps/landing-page/app/agent-guides.part-d.i18n.ts @@ -0,0 +1,186 @@ +/* + * Localized agent-guide copy (part D) for the landing-page agent detail pages. + * + * Split across part files to stay under the repo's changed-file blob guard. + * Each part spreads the English guide first (so non-rendered compact fields + * stay type-complete) then overrides the rendered fields + rich payload with + * the translation. Machine-translated from English; native review welcome. + */ +import type { InfoPageCopy } from './info-page-i18n'; +import type { LandingLocaleCode } from './i18n'; + +type Guides = NonNullable; + + +export function localizedAgentGuidesPartD(en: Guides): Partial> { + return { + 'nl': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code voor design — Open Design", + description: "Hoe designers Claude Code gebruiken voor UI- en webdesign, en hoe Open Design er een echte design-agent van maakt — local-first, BYOK, met een samengestelde bibliotheek van skills en design systems.", + breadcrumb: "Claude Code", + label: "Agent · Claude Code", + heading: "Claude Code voor design.", + lead: "Claude Code is de terminal-coding-agent van Anthropic. Mensen gebruiken hem al om UI's, design systems en landingspagina's te bouwen. Open Design koppelt hem aan een echte design-workflow — neem je Anthropic-key of Claude-abonnement mee en houd elk bestand lokaal.", + rich: {"heroCtaLead": "Open Design maakt van Claude Code een local-first, open-source design-agent — je Anthropic-key of Claude-abonnement, je bestanden, en een samengestelde bibliotheek van skills en design systems eromheen.", "heroCtaActions": [{"label": "Gebruik Claude Code binnen Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Geef een ster op GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Download de desktop-app", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code wordt algemeen beschouwd als de coding-agent met de beste frontend-smaak — hij redeneert met ongewone precisie over interfaces, noemt exacte hex-waarden, spacing en typeschalen, en refactort UI in een grote codebase zonder de draad kwijt te raken. Maar standaard neigt hij toch naar een generieke look, tenzij je hem een design system, skills en echte referenties aanreikt. Dit is een praktische, end-to-end gids voor het gebruik van Claude Code voor UI-, frontend- en design-system-werk, en voor het inbedden ervan in een gestructureerde workflow met Open Design.", "Het behandelt wat Claude Code precies is, waarom hij sterk is in frontend, hoe je hem vanaf nul opzet, de CLAUDE.md- en Skills-workflow, de officiële Figma-round-trip, hoe hij zich verhoudt tot Codex en Cursor, de valkuilen die AI-output generiek doen ogen, en hoe Open Design de kloof dicht als een open, local-first designlaag."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Feedbacklus van Claude Code-design: terminal-agent die specifieke designbeslissingen neemt, een browser die de UI rendert, en een werkruimte, met een feedbackpijl die terugloopt", "caption": "De kernlus: Claude Code redeneert specifieke UI-beslissingen uit in de terminal, rendert en verifieert ze in een echte browser, en convergeert naar je referenties."}, "tocLabel": "Op deze pagina", "toc": [{"id": "what-is-claude-code", "label": "Wat Claude Code precies is"}, {"id": "why-design", "label": "Waarom Claude Code goed is in design"}, {"id": "setup", "label": "Claude Code instellen voor design (vanaf nul)"}, {"id": "skills-workflow", "label": "De CLAUDE.md- en Skills-workflow"}, {"id": "figma", "label": "Claude Code + Figma-round-trip"}, {"id": "vs", "label": "Claude Code vs Codex vs Cursor"}, {"id": "pitfalls", "label": "Valkuilen en de “AI slop”-look"}, {"id": "open-design", "label": "Designen met Claude Code in Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-claude-code", "heading": "Wat Claude Code precies is", "blocks": [{"kind": "p", "text": "Claude Code is de agentic coding-tool van Anthropic. Hij leest je codebase, bewerkt bestanden, voert commando's uit en integreert met je dev-tools — hij plant, schrijft en verifieert werk op basis van taken in natuurlijke taal in plaats van alleen regels aan te vullen."}, {"kind": "p", "text": "Hij komt in meerdere vormen die allemaal dezelfde engine delen: een terminal-CLI, IDE-extensies voor VS Code, Cursor en JetBrains, een desktop-app met visuele diff-review, en een web-ervaring voor langlopende taken. Je CLAUDE.md-bestanden, instellingen en MCP-servers reizen overal mee."}, {"kind": "steps", "items": [{"label": "Instructiebestand", "body": "Claude Code leest aan het begin van elke sessie een CLAUDE.md-bestand in je projectroot — de natuurlijke plek om je designconventies, tokens en review-checklists vast te leggen."}, {"label": "Skills", "body": "Agent Skills bundelen herbruikbare instructies, scripts en resources die Claude op aanvraag laadt, waaronder Anthropics officiële Frontend Design-skill voor smaak."}, {"label": "Plan en subagents", "body": "Hij kan plannen voordat hij handelt en subagents opstarten die parallel aan verschillende delen van een taak werken, wat grote UI-refactors coherent houdt."}]}, {"kind": "ul", "items": ["Leverancier: Anthropic", "Credential: Anthropic API-key (BYOK, via de Console) of een Claude-abonnement (Pro / Max)", "Vormen: terminal-CLI, VS Code- / Cursor- / JetBrains-extensies, desktop-app, web"]}]}, {"id": "why-design", "heading": "Waarom Claude Code goed is in design", "blocks": [{"kind": "p", "text": "Onder coding-agents heeft Claude Code een reputatie voor smaak in frontend-werk. Een paar dingen verklaren dat."}, {"kind": "steps", "items": [{"label": "Specifieke, niet vage, beslissingen", "body": "Claude Code neigt naar concrete keuzes — exacte hex-waarden, spacing-schalen, typeschalen en componenthiërarchie — in plaats van vaagheid, en dat is wat een echte interface onderscheidt van een placeholder."}, {"label": "Codebase-bewust redeneren", "body": "Met een grote werkcontext refactort hij UI over veel bestanden tegelijk en hergebruikt hij je bestaande componenten en tokens in plaats van eenmalige stijlen opnieuw uit te vinden."}, {"label": "Een officiële frontend-skill", "body": "Anthropic levert een Frontend Design-skill die Claude eerst een designrichting laat schrijven en bewust wegstuurt van generieke systeemlettertypen en voorspelbare paarse gradiënten."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Diagram dat laat zien hoe design system, skill en referentiebeeld samenkomen tot goede design-output", "caption": "Smaak komt voort uit drie inputs die jij aanlevert: een design system, een skill en echte referentiebeelden."}, {"kind": "p", "text": "De les is dezelfde die Anthropic over zijn eigen modellen maakt: Claude heeft standaard geen smaak — aan zichzelf overgelaten convergeert hij naar het statistische midden van webdesign (Inter, paarse gradiënten, zachte schaduwen). Hij levert goed design wanneer je hem beperkingen geeft. Open Design verpakt precies die inputs, en daarom passen de twee samen (meer hieronder)."}]}, {"id": "setup", "heading": "Claude Code voor designwerk opzetten, vanaf nul", "blocks": [{"kind": "p", "text": "Dit is het volledige pad van een schone machine naar een Claude Code die UI kan bouwen en verifiëren."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Setupflow in vijf stappen: installeren, authenticeren, CLAUDE.md configureren, skill toevoegen, verifiëren", "caption": "De setup-volgorde: installeren → authenticeren → CLAUDE.md configureren → de Frontend Design-skill toevoegen → browserverificatie inschakelen."}, {"kind": "steps", "items": [{"label": "Leg je designregels vast", "body": "Zet je tokens, primitives en conventies in CLAUDE.md en wijs Claude erop, zodat de output bij een merk past in plaats van terug te vallen op een generieke look."}, {"label": "Voeg browserverificatie toe", "body": "Koppel een Playwright- of Chrome-MCP zodat Claude in een echte browser rendert en zijn output over breakpoints heen controleert, in plaats van alleen te bevestigen dat de build slaagt."}]}]}, {"id": "skills-workflow", "heading": "De CLAUDE.md- en Skills-workflow", "blocks": [{"kind": "p", "text": "De design-lus met de meeste hefboomwerking bij Claude Code is hem echte referenties plus je designcontext voeden en dan itereren tot de UI klopt — met CLAUDE.md en Skills die de beperkingen vasthouden, zodat je ze niet bij elke prompt opnieuw hoeft uit te leggen."}, {"kind": "ol", "items": ["Begin met de helderste visuele referenties die je hebt — en neem meerdere states mee (desktop en mobiel, hover, leeg, laden), niet alleen één hero-shot.", "Wees specifiek in de prompt; vage prompts leveren generieke UI op, zelfs met een sterke agent.", "Houd je design system en conventies in CLAUDE.md en vertel Claude waar de tokens en canonieke primitives staan.", "Voeg de Frontend Design-skill toe zodat Claude zich vastlegt op een echte esthetische richting voordat hij code schrijft.", "Koppel browserverificatie zodat Claude rendert, naar breakpoints herschaalt en terugvergelijkt met de referenties — niet alleen bevestigt dat het bouwt."]}, {"kind": "p", "text": "Sleep een referentiebeeld in de sessie en prompt met concrete beperkingen:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Draai er een dev-server naast, houd prompts klein en gericht, en commit goede iteraties / draai slechte terug (vertel Claude wanneer je terugdraait) zodat elke ronde voortbouwt op een schone basis. Gebruik plan-mode voor grotere refactors zodat je de aanpak kunt beoordelen voordat er bestanden veranderen."}]}, {"id": "figma", "heading": "Claude Code + Figma: design ↔ code-round-trip", "blocks": [{"kind": "p", "text": "In februari 2026 leverden Anthropic en Figma een eersteklas, bidirectionele integratie via de Figma MCP-server. Hij werkt in beide richtingen."}, {"kind": "steps", "items": [{"label": "Design → Code", "body": "Selecteer een frame in Figma of plak een link in Claude Code, haal de designcontext op en vraag hem het design te implementeren met je bestaande componentbibliotheek. Code Connect houdt de output uitgelijnd met je echte componenten."}, {"label": "Code → Design", "body": "Bouw en bekijk een feature in de browser en zeg dan “Send this to Figma” om de draaiende UI vast te leggen als bewerkbare Figma-lagen — het hele scherm of een geselecteerd element."}]}, {"kind": "p", "text": "Installeer hem eenmalig met claude plugin install figma@claude-plugins-official (Dev Mode MCP vereist een betaald Figma-plan). Dezelfde Figma MCP is beschikbaar voor Claude Code, Codex, Cursor en VS Code — precies het soort draagbare, multi-agent-capaciteit dat Open Design is gebouwd om te orkestreren."}]}, {"id": "vs", "heading": "Claude Code vs Codex vs Cursor voor design", "blocks": [{"kind": "p", "text": "Er is geen enkele winnaar voor designwerk — elke agent heeft een andere kracht, en ervaren teams stapelen ze. Een eerlijke samenvatting:"}, {"kind": "table", "columns": ["Agent", "Design-kracht", "Beste voor"], "rows": [["Claude Code", "Specifieke designbeslissingen (hex, spacing, type) en codebase-bewust UX-redeneren", "Frontend-redeneren en refactors met grote context"], ["Codex", "Sterke visuele afwerking en beeldbegrip; gesandboxte async builds", "Gedelegeerde async builds en draagbare AGENTS.md-regels"], ["Cursor", "Visuele build-and-see-lus met live preview en inline edits", "Strak itereren-en-bekijken van UI-werk binnen een IDE"]]}, {"kind": "p", "text": "Het terugkerende oordeel van de community is dat smaak van mensen komt: alle drie vallen zonder skills, referenties en beperkingen terug op een generieke esthetiek. Dat is het echte probleem dat opgelost moet worden — en het heeft de vorm van een design-tool, niet van een model."}]}, {"id": "pitfalls", "heading": "Valkuilen, en hoe je de “AI slop”-look vermijdt", "blocks": [{"kind": "p", "text": "Zelfs met Claude Code's reputatie voor smaak is de meest voorkomende klacht over AI-gegenereerd design dat het generiek oogt — Inter-lettertypen, paarse gradiënten op wit, zachte schaduwen, te grote afgeronde hoeken, een esthetiek die “schreeuwt dat een AI dit maakte.” Anthropic zelf schrijft dit toe aan distributionele convergentie: veilige keuzes domineren de trainingsdata van het web. Andere gemelde problemen zijn kapotte mobiele layouts en instructies die in de UI-tekst lekken."}, {"kind": "steps", "items": [{"label": "Installeer de Frontend Design-skill", "body": "Hij dwingt Claude zich op een echte richting vast te leggen en vermijdt expliciet lettertypen en gradiënten die door AI worden overgebruikt."}, {"label": "Schakel browserverificatie in", "body": "Laat Claude renderen en zichzelf controleren over breakpoints heen, zodat layouts niet stilletjes breken op mobiel."}, {"label": "Lever tokens en referenties aan", "body": "Echte design-tokens en referentie-screenshots zijn de grootste hefboom op de outputkwaliteit."}, {"label": "Leg regels vast in CLAUDE.md", "body": "Zet stijlregels als “geen hero cards, maximaal twee lettertypen, merk-eerste hiërarchie” daar waar de agent ze elke ronde leest."}]}, {"kind": "p", "text": "Merk op dat elke remedie draait om het geven van een samengestelde designcontext aan de agent. Die context met de hand onderhouden, per project, is precies het sleurwerk dat Open Design wegneemt."}]}, {"id": "open-design", "heading": "Designen met Claude Code binnen Open Design", "blocks": [{"kind": "p", "text": "Open Design is de open-source designlaag waar de workflow hierboven steeds om vraagt. Het behandelt Claude Code als een first-party adapter en omhult hem met een samengestelde bibliotheek van skills en design systems, een gestructureerde render-pipeline en een lokale desktop-UI — zodat de designcontext die Claude Code goed maakt er vanaf de eerste run is, niet elke keer met de hand samengesteld."}, {"kind": "ol", "items": ["Installeer Open Design en kies Claude Code als je agent.", "Authenticeer met je Anthropic API-key (BYOK) of Claude-abonnement — credentials blijven op je machine en worden nooit via ons doorgesluisd.", "Kies een design system en een skill, en genereer vervolgens decks, prototypes en landingspagina's met consistente smaak.", "Elk artefact en DESIGN.md-bestand staat in je eigen repo, niet in een gehoste cloud."]}, {"kind": "p", "text": "Dezelfde Claude Code-agent, dezelfde key — plus een echte, draagbare, open-source design-workflow eromheen. Het is local-first en Apache-2.0, dus niets over je werk of je credentials verlaat je machine."}]}], "faqTitle": "Veelgestelde vragen", "faq": [{"name": "Is Claude Code goed voor designwerk?", "text": "Ja — hij wordt algemeen beschouwd als de coding-agent met de beste frontend-smaak, die specifieke, codebase-bewuste beslissingen neemt over hex-waarden, spacing en typeschalen. Met de Frontend Design-skill, een design system en echte referentiebeelden in context produceert hij responsieve UI van productiekwaliteit en kan hij die in een browser verifiëren. Zonder die context neigt hij naar een generieke look, en dat is de kloof die Open Design dicht."}, {"name": "Heb ik een Claude-abonnement nodig om te designen met Claude Code?", "text": "Je kunt zowel een Anthropic API-key (BYOK, via de Console) als een Claude-abonnement (Pro / Max) gebruiken. Hoe dan ook sluist Open Design je credentials nooit door — ze worden direct gebruikt door je agent op je machine."}, {"name": "Claude Code of Codex voor frontend-design?", "text": "Beide zijn sterk. Claude Code staat bekend om specifieke, codebase-bewuste designbeslissingen en frontend-redeneren; Codex heeft sterke visuele afwerking en blinkt uit in gedelegeerde, gesandboxte builds. Veel teams gebruiken beide — met Open Design wissel je van agent zonder je design-workflow te veranderen."}, {"name": "Hoe verbind ik Claude Code met Figma?", "text": "Installeer de officiële Figma-plugin met claude plugin install figma@claude-plugins-official. Je kunt dan Figma-frames in code implementeren met de designcontext, en een draaiende UI terugduwen naar bewerkbare Figma-frames met “Send this to Figma.” Dev Mode MCP vereist een betaald Figma-plan."}, {"name": "Wat zijn Skills en CLAUDE.md?", "text": "CLAUDE.md is een markdown-bestand in je projectroot dat Claude Code aan het begin van elke sessie leest — de plek om je designconventies vast te leggen. Skills bundelen herbruikbare instructies en resources die Claude op aanvraag laadt, waaronder Anthropics officiële Frontend Design-skill. Open Design levert een samengestelde bibliotheek van beide, zodat je de setup per project overslaat."}, {"name": "Hoe vermijd ik de generieke “AI slop”-esthetiek?", "text": "Installeer de Frontend Design-skill, lever echte design-tokens en referentie-screenshots aan, leg merkregels vast in CLAUDE.md en schakel browserverificatie in. Open Design levert deze als een samengestelde bibliotheek, zodat je de setup per project overslaat."}, {"name": "Is Open Design gelieerd aan Anthropic?", "text": "Nee. Claude Code is een product van Anthropic; Open Design is een onafhankelijk open-source project dat hem ondersteunt als first-party adapter. Claude en Claude Code zijn handelsmerken van Anthropic."}, {"name": "Zijn mijn bestanden en credentials veilig?", "text": "Ja — Open Design is local-first en Apache-2.0. Je bestanden, artefacten en DESIGN.md blijven in je eigen repo, en je Anthropic-credentials worden direct gebruikt door je agent, nooit via Open Design-servers geleid."}], "ctaTitle": "Design met Claude Code, op de open manier.", "ctaBody": "Neem je eigen Anthropic-key of Claude-abonnement mee, houd elk bestand lokaal, en krijg een samengestelde design-bibliotheek rondom de agent die je al gebruikt.", "ctaActions": [{"label": "Gebruik Claude Code binnen Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Geef een ster op GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Download de desktop-app", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Bekijk alle ondersteunde agents"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex voor design — Open Design", + description: "Hoe mensen OpenAI Codex gebruiken voor UI- en webdesign — de Product Design-plugin, Figma-integratie, frontend-skills — en hoe Open Design er een local-first, open-source design-agent van maakt.", + breadcrumb: "Codex", + label: "Agent · Codex", + heading: "Codex voor design.", + lead: "Codex is de coding-agent van OpenAI. Met de Product Design-plugin en Figma-integratie is het een serieuze design-tool geworden. Open Design koppelt Codex aan een open-source design-workflow — je OpenAI-key of ChatGPT-abonnement, je bestanden, local-first.", + rich: {"heroCtaLead": "Open Design maakt van Codex een local-first, open-source design-agent — je OpenAI-key, je bestanden, en een samengestelde bibliotheek van skills en design systems eromheen.", "heroCtaActions": [{"label": "Gebruik Codex binnen Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Geef een ster op GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Download de desktop-app", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex begon als codegenerator, maar werd in 2026 een geloofwaardige tool voor het ontwerpen van echte interfaces — zodra je hem de juiste referenties, skills en verificatielus geeft. Dit is een praktische, end-to-end gids voor het gebruik van Codex voor UI-, frontend- en design-system-werk, en voor het inbedden ervan in een gestructureerde design-workflow met Open Design.", "Het behandelt wat Codex vandaag is, waarom hij plotseling goed is in frontend, hoe je hem vanaf nul opzet, de screenshot-naar-UI-lus, de officiële Figma-round-trip, hoe hij zich verhoudt tot Cursor en Claude Code, de valkuilen die AI-output generiek doen ogen, en hoe Open Design de kloof dicht als een open, local-first designlaag."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Feedbacklus van Codex-design: terminal-agent, browser die de UI rendert, en een werkruimte, met een feedbackpijl die terugloopt", "caption": "De kernlus: Codex bouwt UI in de terminal, rendert en verifieert die in een echte browser, en itereert tegen je referenties."}, "tocLabel": "Op deze pagina", "toc": [{"id": "what-is-codex", "label": "Wat OpenAI Codex precies is"}, {"id": "why-design", "label": "Waarom Codex nu goed is in design"}, {"id": "setup", "label": "Codex instellen voor design (vanaf nul)"}, {"id": "screenshot-workflow", "label": "De screenshot-naar-UI-workflow"}, {"id": "figma", "label": "Codex + Figma-round-trip"}, {"id": "vs", "label": "Codex vs Cursor vs Claude Code"}, {"id": "pitfalls", "label": "Valkuilen en de “AI slop”-look"}, {"id": "open-design", "label": "Designen met Codex in Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-codex", "heading": "Wat OpenAI Codex precies is (en wat niet)", "blocks": [{"kind": "p", "text": "Eerst een verduidelijking die bijna iedereen die op “Codex” zoekt op het verkeerde been zet. De oorspronkelijke OpenAI Codex was een code-completion-model uit 2021 dat de vroege GitHub Copilot aandreef en in 2023 werd uitgefaseerd. Daar gaat deze pagina niet over. De Codex van vandaag is de agentic coding-tool van OpenAI — hij plant, schrijft, draait en verifieert code op basis van taken in natuurlijke taal."}, {"kind": "p", "text": "De moderne Codex komt in vier vormen: een terminal-CLI (herschreven in Rust, gelicentieerd onder Apache-2.0), een IDE-extensie voor VS Code, Cursor en Windsurf, een cloud-/web-ervaring voor gedelegeerde async-taken, en een desktop-app met een ingebouwde browser en Computer Use."}, {"kind": "steps", "items": [{"label": "Standaardmodel", "body": "Vanaf medio 2026 is het aanbevolen model gpt-5.5, waarbij gpt-5.4 het model is dat OpenAI expliciet trainde voor frontend en computer use."}, {"label": "Instructiebestand", "body": "Codex leest een AGENTS.md-bestand in je project (een cross-tool-standaard) voor projectregels — de natuurlijke plek om je designconventies vast te leggen."}, {"label": "Sandbox", "body": "Hij draait in een sandbox op kernelniveau (standaard workspace-write), zodat een agent die je UI bewerkt niet buiten het project kan dwalen."}]}, {"kind": "ul", "items": ["Leverancier: OpenAI", "Credential: OpenAI API-key (BYOK) of ChatGPT-abonnement (Free / Go / Plus / Pro / Business / Enterprise)", "Licentie van de CLI: Apache-2.0, open source"]}]}, {"id": "why-design", "heading": "Waarom Codex nu goed is in design", "blocks": [{"kind": "p", "text": "Begin 2026 kwamen drie dingen samen die van Codex een echte design-tool maakten in plaats van een generieke codegenerator."}, {"kind": "steps", "items": [{"label": "Een frontend-getraind model", "body": "OpenAI leverde GPT-5.4, het eerste mainline-model getraind voor frontend en computer use, met veel beter beeldbegrip over de hele design-workflow en sterkere zelfverificatie. Het kan zelfs mood boards en visuele opties genereren voordat het zich vastlegt op de definitieve assets."}, {"label": "Een officiële frontend-skill", "body": "De openai/skills-catalogus levert een samengestelde frontend-skill die echte smaak afdwingt: cardloze layouts, full-bleed hero's, merk-eerste hiërarchie, ingetogen beweging, hooguit twee lettertypen en één accentkleur — en laat Codex een visuele these schrijven voordat hij bouwt."}, {"label": "Browserverificatie", "body": "Met de Playwright-skill opent Codex een echte browser, herschaalt naar breakpoints en vergelijkt zijn output terug met de referentie in plaats van alleen te controleren of de build slaagt."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Diagram dat laat zien hoe design system, skill en referentiebeeld samenkomen tot goede design-output", "caption": "Smaak komt voort uit drie inputs die jij aanlevert: een design system, een skill en echte referentiebeelden."}, {"kind": "p", "text": "De les achter alle drie: Codex heeft standaard geen smaak. Hij levert goed design wanneer je hem beperkingen geeft — een design system, een esthetische skill en concrete referenties. Open Design verpakt precies die inputs, en daarom passen de twee samen (meer hieronder)."}]}, {"id": "setup", "heading": "Codex voor designwerk opzetten, vanaf nul", "blocks": [{"kind": "p", "text": "Dit is het volledige pad van een schone machine naar een Codex die UI kan bouwen en verifiëren."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Setupflow in vijf stappen: installeren, authenticeren, configureren, skill installeren, verifiëren", "caption": "De setup-volgorde: installeren → authenticeren → AGENTS.md configureren → de frontend-skill installeren → browserverificatie inschakelen."}, {"kind": "steps", "items": [{"label": "Leg je designregels vast", "body": "Zet je tokens, primitives en conventies in AGENTS.md of een DESIGN.md en wijs Codex erop, zodat de output bij een merk past in plaats van terug te vallen op een generieke look."}, {"label": "Kies het juiste reasoning-niveau", "body": "OpenAI merkt op dat laag-tot-gemiddelde reasoning-niveaus vaak sterkere frontend-resultaten opleveren dan de hoogste instelling."}]}]}, {"id": "screenshot-workflow", "heading": "De screenshot-naar-UI-workflow", "blocks": [{"kind": "p", "text": "De design-lus met de meeste hefboomwerking bij Codex is een referentiebeeld omzetten in werkende, responsieve UI en itereren tot het klopt. OpenAI's eigen richtlijnen komen neer op vijf stappen."}, {"kind": "ol", "items": ["Begin met de helderste visuele referenties die je hebt — en neem meerdere states mee (desktop en mobiel, hover, leeg, laden), niet alleen één hero-shot.", "Wees specifiek in de prompt; vage prompts leveren generieke UI op.", "Bereid een design system voor en vertel Codex waar de tokens en canonieke primitives staan.", "Schakel de interactieve Playwright-skill in zodat Codex in een echte browser rendert en naar breakpoints herschaalt.", "Itereer door Codex zijn implementatie terug te laten vergelijken met de screenshots — niet alleen te bevestigen dat het bouwt."]}, {"kind": "p", "text": "Voer beelden in door een screenshot in de terminal te slepen of met de image-flag, en prompt dan met concrete beperkingen:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Draai een dev-server in een tweede terminal, houd prompts klein en gericht, en commit goede iteraties / draai slechte terug (vertel Codex wanneer je terugdraait) zodat elke ronde voortbouwt op een schone basis."}]}, {"id": "figma", "heading": "Codex + Figma: design ↔ code-round-trip", "blocks": [{"kind": "p", "text": "In februari 2026 kondigden OpenAI en Figma een officieel partnerschap aan, waarmee de eerdere Figma MCP-bèta een eersteklas, bidirectionele integratie werd. Hij werkt in beide richtingen."}, {"kind": "steps", "items": [{"label": "Design → Code", "body": "Kopieer de “link to selection” van een frame in Figma, plak die in Codex met get_design_context en vraag hem het design te implementeren met je bestaande componentbibliotheek."}, {"label": "Code → Design", "body": "De generate_figma_design-tool (“Code to Canvas”) zet een live, draaiende UI terug om in bewerkbare Figma-frames — het hele scherm, een geselecteerd element of een heel bestand."}]}, {"kind": "p", "text": "De Figma MCP draait als een remote server en is vrijgesteld van rate limits. Voeg hem eenmalig toe en hij is beschikbaar voor Codex, Claude Code, Cursor, VS Code en meer — precies het soort draagbare, multi-agent-capaciteit dat Open Design is gebouwd om te orkestreren."}]}, {"id": "vs", "heading": "Codex vs Cursor vs Claude Code voor design", "blocks": [{"kind": "p", "text": "Er is geen enkele winnaar voor designwerk — elke agent heeft een andere kracht, en ervaren teams stapelen ze. Een eerlijke samenvatting:"}, {"kind": "table", "columns": ["Agent", "Design-kracht", "Beste voor"], "rows": [["Codex", "Sterke visuele afwerking na GPT-5.4 + frontend-skill; beeldbegrip", "Gedelegeerde async builds, gesandboxte runs, draagbare AGENTS.md-regels"], ["Cursor", "Visuele build-and-see-lus met live preview en inline edits", "Strak itereren-en-bekijken van UI-werk binnen een IDE"], ["Claude Code", "Specifieke designbeslissingen (hex, spacing, type) en codebase-bewuste UX", "Frontend-redeneren en refactors met grote context"]]}, {"kind": "p", "text": "Het terugkerende oordeel van de community is dat smaak van mensen komt: alle drie vallen zonder skills, referenties en beperkingen terug op een generieke esthetiek. Dat is het echte probleem dat opgelost moet worden — en het heeft de vorm van een design-tool, niet van een model."}]}, {"id": "pitfalls", "heading": "Valkuilen, en hoe je de “AI slop”-look vermijdt", "blocks": [{"kind": "p", "text": "De meest voorkomende klacht over door Codex gegenereerd design is dat het generiek oogt — zachte gradiënten, zwevende panelen, te grote afgeronde hoeken, dramatische schaduwen, een Inter-en-paars-sfeer die “schreeuwt dat een AI dit maakte.” Andere gemelde problemen zijn kapotte mobiele layouts, instructies die in de UI-tekst lekken en het snel bereiken van gebruikslimieten."}, {"kind": "steps", "items": [{"label": "Installeer een frontend-skill", "body": "Een samengestelde esthetische skill dwingt Codex zich op een echte richting vast te leggen in plaats van de standaard look."}, {"label": "Schakel Playwright-verificatie in", "body": "Laat Codex renderen en zichzelf controleren over breakpoints heen, zodat layouts niet stilletjes breken op mobiel."}, {"label": "Lever tokens en referenties aan", "body": "Echte design-tokens en referentie-screenshots zijn de grootste hefboom op de outputkwaliteit."}, {"label": "Leg regels vast in AGENTS.md", "body": "Zet stijlregels als “geen hero cards, maximaal twee lettertypen, merk-eerste hiërarchie” daar waar de agent ze elke ronde leest."}]}, {"kind": "p", "text": "Merk op dat elke remedie draait om het geven van een samengestelde designcontext aan de agent. Die context met de hand onderhouden, per project, is precies het sleurwerk dat Open Design wegneemt."}]}, {"id": "open-design", "heading": "Designen met Codex binnen Open Design", "blocks": [{"kind": "p", "text": "Open Design is de open-source designlaag waar de workflow hierboven steeds om vraagt. Het behandelt Codex als een first-party adapter en omhult hem met een samengestelde bibliotheek van skills en design systems, een gestructureerde render-pipeline en een lokale desktop-UI — zodat de designcontext die Codex goed maakt er vanaf de eerste run is, niet elke keer met de hand samengesteld."}, {"kind": "ol", "items": ["Installeer Open Design en kies Codex als je agent.", "Authenticeer met je OpenAI API-key (BYOK) of ChatGPT-abonnement — credentials blijven op je machine en worden nooit via ons doorgesluisd.", "Kies een design system en een skill, en genereer vervolgens decks, prototypes en landingspagina's met consistente smaak.", "Elk artefact en DESIGN.md-bestand staat in je eigen repo, niet in een gehoste cloud."]}, {"kind": "p", "text": "Dezelfde Codex-agent, dezelfde key — plus een echte, draagbare, open-source design-workflow eromheen. Het is local-first en Apache-2.0, dus niets over je werk of je credentials verlaat je machine."}]}], "faqTitle": "Veelgestelde vragen", "faq": [{"name": "Kan OpenAI Codex echt designwerk doen?", "text": "Ja — met een frontend-skill, een design system en echte referentiebeelden in context produceert Codex (zeker op GPT-5.4) responsieve UI van productiekwaliteit en kan hij die in een browser verifiëren. Zonder die context neigt hij naar een generieke look, en dat is de kloof die Open Design dicht."}, {"name": "Is dit de OpenAI Codex Product Design-plugin?", "text": "Nee. Open Design is een onafhankelijk open-source project dat Codex integreert als agent. Het vult OpenAI's eigen tooling aan met een local-first, open bibliotheek van skills en design systems."}, {"name": "Heb ik een ChatGPT-abonnement nodig om te designen met Codex?", "text": "Je kunt zowel een OpenAI API-key (BYOK) als je ChatGPT-abonnement gebruiken. Inloggen met ChatGPT geeft doorgaans ruimere limieten; Open Design sluist je credentials hoe dan ook nooit door."}, {"name": "Codex of Claude Code voor frontend-design?", "text": "Beide zijn sterk. Claude Code staat bekend om specifieke, codebase-bewuste designbeslissingen; Codex heeft sterke visuele afwerking na GPT-5.4 en blinkt uit in gedelegeerde, gesandboxte builds. Veel teams gebruiken beide — met Open Design wissel je van agent zonder je design-workflow te veranderen."}, {"name": "Hoe verbind ik Codex met Figma?", "text": "Voeg de officiële Figma MCP-server toe (codex mcp add figma --url https://mcp.figma.com/mcp). Je kunt dan Figma-frames in code implementeren met get_design_context en een draaiende UI terugduwen naar bewerkbare Figma-frames met generate_figma_design."}, {"name": "Hoe vermijd ik de generieke “AI slop”-esthetiek?", "text": "Installeer een frontend-skill, lever echte design-tokens en referentie-screenshots aan, leg merkregels vast in AGENTS.md en schakel Playwright-verificatie in. Open Design levert deze als een samengestelde bibliotheek, zodat je de setup per project overslaat."}, {"name": "Is Open Design gelieerd aan OpenAI?", "text": "Nee. Codex is een product van OpenAI; Open Design is een onafhankelijk open-source project dat hem ondersteunt als first-party adapter. OpenAI en Codex zijn handelsmerken van OpenAI."}, {"name": "Zijn mijn bestanden en credentials veilig?", "text": "Ja — Open Design is local-first. Je bestanden, artefacten en DESIGN.md blijven in je eigen repo, en je OpenAI-credentials worden direct gebruikt door je agent, nooit via Open Design-servers geleid."}], "ctaTitle": "Design met Codex, op de open manier.", "ctaBody": "Neem je eigen OpenAI-key mee, houd elk bestand lokaal, en krijg een samengestelde design-bibliotheek rondom de agent die je al gebruikt.", "ctaActions": [{"label": "Gebruik Codex binnen Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Geef een ster op GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Download de desktop-app", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Bekijk alle ondersteunde agents"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor voor designers — Open Design", + description: "Hoe designers Cursor gebruiken voor UI- en webdesign — Design Mode, Figma-naar-code, de Figma MCP — en hoe Open Design er een local-first, open-source design-agent van maakt.", + breadcrumb: "Cursor", + label: "Agent · Cursor", + heading: "Cursor voor designers.", + lead: "Cursor is de AI-code-editor, nu met een visuele Design Mode. Designers gebruiken hem om UI te bewerken door aan te wijzen en te tekenen, en om Figma in code om te zetten. Open Design koppelt Cursor Agent aan een open-source design-workflow die je bestanden lokaal houdt.", + rich: {"heroCtaLead": "Open Design maakt van Cursor een local-first, open-source design-agent — je Cursor-account of model-keys, je bestanden, en een samengestelde bibliotheek van skills en design systems eromheen.", "heroCtaActions": [{"label": "Gebruik Cursor binnen Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Geef een ster op GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Download de desktop-app", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor is de AI-first code-editor die van “bouw het en zie het renderen” de standaardmanier maakte om UI te leveren. Met Agent-mode, inline edits, een preview in de editor en Figma via MCP is het een echte design-tool geworden — zodra je hem de juiste referenties, regels en een verificatielus geeft. Dit is een praktische, end-to-end gids voor het gebruik van Cursor voor UI-, frontend- en design-system-werk, en voor het inbedden ervan in een gestructureerde design-workflow met Open Design.", "Het behandelt wat Cursor precies is, waarom zijn strakke itereren-en-bekijken-lus goed is voor design, hoe je hem vanaf nul opzet, de screenshot-en-preview-naar-UI-lus, de Figma-round-trip via MCP, hoe hij zich verhoudt tot Codex en Claude Code, de valkuilen die AI-output generiek doen ogen, en hoe Open Design de kloof dicht als een open, local-first designlaag."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Cursor-design-convergentie: editor links, een samengestelde hub met skills en design systems in het midden met het Cursor-merk centraal, en een gerenderde UI rechts", "caption": "Het kernidee: Cursor bewerkt en rendert UI in de editor, terwijl een samengestelde design-hub hem het system, de skills en de referenties voedt die de output intentioneel doen ogen."}, "tocLabel": "Op deze pagina", "toc": [{"id": "what-is-cursor", "label": "Wat Cursor precies is"}, {"id": "why-design", "label": "Waarom Cursor goed is in design"}, {"id": "setup", "label": "Cursor instellen voor design (vanaf nul)"}, {"id": "preview-workflow", "label": "De preview-naar-UI-workflow"}, {"id": "figma", "label": "Cursor + Figma via MCP"}, {"id": "vs", "label": "Cursor vs Codex vs Claude Code"}, {"id": "pitfalls", "label": "Valkuilen en de “AI slop”-look"}, {"id": "open-design", "label": "Designen met Cursor in Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-cursor", "heading": "Wat Cursor precies is", "blocks": [{"kind": "p", "text": "Cursor is een AI-first code-editor gebouwd door Anysphere. Het is een fork van VS Code, dus de vertrouwde editor, extensies en keybindings blijven behouden, maar de workflow is heropgebouwd rond een AI-agent die je hele project kan lezen, meerdere bestanden kan bewerken, commando's kan uitvoeren en met jou in de lus kan itereren."}, {"kind": "p", "text": "Voor designwerk zijn de belangrijke vormen Agent-mode (je beschrijft een uitkomst en Cursor plant en bewerkt over bestanden heen), inline edits en Tab-completions voor snelle aanpassingen, een preview / browser in de editor zodat je de draaiende UI ziet zonder het venster te verlaten, en MCP-ondersteuning waarmee hij externe context kan binnenhalen, zoals een live Figma-bestand."}, {"kind": "steps", "items": [{"label": "Project-regels", "body": "Cursor leest project-instructiebestanden — geversioneerde `.mdc`-regels onder `.cursor/rules`, en een gewone `AGENTS.md` — zodat je je designconventies kunt vastleggen waar de agent ze elke ronde leest."}, {"label": "Modellen", "body": "Cursor is model-flexibel: hij wordt geleverd met frontier-modellen via je abonnement en ondersteunt ook het meebrengen van je eigen model-keys, zodat je de engine achter dezelfde editor-workflow kiest."}, {"label": "MCP", "body": "Hij spreekt het Model Context Protocol, zodat externe servers — meest relevant de Figma MCP-server — eersteklas context worden voor de agent."}]}, {"kind": "ul", "items": ["Leverancier: Anysphere", "Credential: Cursor-account / -abonnement (Hobby / Pro / Business) of je eigen model-keys (BYOK)", "Vorm: AI-first code-editor (VS Code-fork) met een agent en preview in de editor"]}]}, {"id": "why-design", "heading": "Waarom Cursor goed is in design", "blocks": [{"kind": "p", "text": "Cursors design-voorsprong is geen enkele feature — het is de strakheid van de build-and-see-lus. Drie dingen laten het aanvoelen als een design-tool in plaats van een generieke codegenerator."}, {"kind": "steps", "items": [{"label": "Een strakke itereren-en-bekijken-lus", "body": "Je prompt, Cursor bewerkt over bestanden heen, en de preview in de editor rendert het resultaat meteen — zodat je spacing, hiërarchie en beweging in seconden aanpast in plaats van heen en weer te gaan tussen een aparte terminal en browser."}, {"label": "Direct visueel bewerken", "body": "Naast chat laat Cursor je elementen in de preview selecteren en stijlen bijstellen, zodat kleine visuele correcties aanvoelen als design-edits in plaats van code-archeologie."}, {"label": "Project-regels en MCP-context", "body": "Met `.cursor/rules` (of `AGENTS.md`) en de Figma MCP-server werkt de agent tegen je tokens, componenten en echte design-specs in plaats van te gokken."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Diagram dat laat zien hoe design system, skill en referentiebeeld samenkomen tot goede design-output", "caption": "Smaak komt voort uit drie inputs die jij aanlevert: een design system, een skill en echte referentiebeelden."}, {"kind": "p", "text": "De les is dezelfde die elke agent leert: Cursor heeft standaard geen smaak. Hij levert goed design wanneer je hem beperkingen geeft — een design system, een esthetische skill en concrete referenties. Open Design verpakt precies die inputs, en daarom passen de twee samen (meer hieronder)."}]}, {"id": "setup", "heading": "Cursor voor designwerk opzetten, vanaf nul", "blocks": [{"kind": "p", "text": "Dit is het volledige pad van een schone machine naar een Cursor die UI kan bouwen, previewen en verifiëren tegen je design system."}, {"kind": "ol", "items": ["Installeer Cursor vanaf cursor.com en log in met je Cursor-account, of configureer je eigen model-keys (BYOK) in Settings.", "Open je project en kies een model in het chat- / Agent-paneel.", "Voeg project-regels toe: maak `.cursor/rules/*.mdc` voor gestructureerde, glob-scoped conventies, of een gewone `AGENTS.md` voor eenvoudige, leesbare instructies.", "Verbind de Figma MCP-server (optioneel) zodat de agent live designcontext kan lezen.", "Draai je dev-server en gebruik de preview in de editor om de UI te zien en te verifiëren terwijl je itereert."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Setupflow in vijf stappen: installeren, authenticeren, regels configureren, skill toevoegen, verifiëren", "caption": "De setup-volgorde: installeren → authenticeren → project-regels configureren → een skill toevoegen → preview-verificatie inschakelen."}, {"kind": "p", "text": "Een minimaal project-regelbestand laat de agent designen naar een merk in plaats van terug te vallen op een generieke look. Zet het waar Cursor het elke ronde leest:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Leg je designregels vast", "body": "Zet je tokens, primitives en conventies in `.cursor/rules` of `AGENTS.md` en wijs Cursor erop, zodat de output bij een merk past in plaats van terug te vallen op een generieke look."}, {"label": "Houd prompts klein", "body": "Cursors strakke lus beloont gerichte vragen — itereer één component of state tegelijk en bekijk de preview tussen de rondes."}]}]}, {"id": "preview-workflow", "heading": "De preview-naar-UI-workflow", "blocks": [{"kind": "p", "text": "De design-lus met de meeste hefboomwerking bij Cursor is een referentie omzetten in werkende, responsieve UI en in de editor itereren tot het klopt — terwijl je de hele tijd naar de live preview kijkt in plaats van te gokken."}, {"kind": "ol", "items": ["Begin met de helderste visuele referenties die je hebt — en neem meerdere states mee (desktop en mobiel, hover, leeg, laden), niet alleen één hero-shot.", "Wees specifiek in de prompt; vage prompts leveren generieke UI op.", "Bereid een design system voor en vertel Cursor waar de tokens en canonieke primitives staan.", "Houd de preview in de editor open en je dev-server draaiend zodat elke edit meteen rendert op de breakpoints die voor jou belangrijk zijn.", "Itereer door de gerenderde UI terug te vergelijken met de referenties — en gebruik directe elementselectie in de preview voor kleine visuele correcties."]}, {"kind": "p", "text": "Voer referenties in door een beeld aan de chat te koppelen en prompt dan met concrete beperkingen:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Commit goede iteraties en draai slechte terug (vertel Cursor wanneer je terugdraait) zodat elke ronde voortbouwt op een schone basis — dezelfde discipline die elke agent-lus tegen afdrijven beschermt."}]}, {"id": "figma", "heading": "Cursor + Figma: design ↔ code via MCP", "blocks": [{"kind": "p", "text": "Cursor verbindt met Figma via de officiële Figma MCP-server, die de agent gestructureerde toegang geeft tot een live Figma-bestand in plaats van een platte screenshot. Dat haalt het giswerk uit de handoff."}, {"kind": "steps", "items": [{"label": "Design → Code", "body": "Kopieer de link van een frame in Figma, plak die in Cursor en vraag hem het design te implementeren. De MCP-server stelt echte designcontext beschikbaar — componenten, variabelen, layout-data, tokens — zodat de gegenereerde code de bron evenaart in plaats van benadert."}, {"label": "Blijf uitgelijnd", "body": "Met design-tokens, stijlen en componenten consistent gebruikt in Figma (en Code Connect waar beschikbaar) blijft Cursors output gekoppeld aan je echte design system in plaats van primitives opnieuw uit te vinden."}]}, {"kind": "p", "text": "Stel de remote Figma MCP-server eenmalig in en hij is beschikbaar voor Cursor als eersteklas context. Omdat MCP een open standaard is, is dezelfde server herbruikbaar over Cursor, Claude Code, Codex en VS Code — precies het soort draagbare, multi-agent-capaciteit dat Open Design is gebouwd om te orkestreren."}]}, {"id": "vs", "heading": "Cursor vs Codex vs Claude Code voor design", "blocks": [{"kind": "p", "text": "Er is geen enkele winnaar voor designwerk — elke agent heeft een andere kracht, en ervaren teams stapelen ze. Een eerlijke samenvatting:"}, {"kind": "table", "columns": ["Agent", "Design-kracht", "Beste voor"], "rows": [["Cursor", "Visuele build-and-see-lus met live preview in de editor en direct elementen bewerken", "Strak itereren-en-bekijken van UI-werk binnen een IDE"], ["Codex", "Sterke visuele afwerking met een frontend-skill; beeldbegrip en gesandboxte runs", "Gedelegeerde async builds en draagbare AGENTS.md-regels"], ["Claude Code", "Specifieke designbeslissingen (hex, spacing, type) en codebase-bewuste UX", "Frontend-redeneren en refactors met grote context"]]}, {"kind": "p", "text": "Het terugkerende oordeel van de community is dat smaak van mensen komt: alle drie vallen zonder skills, referenties en beperkingen terug op een generieke esthetiek. Dat is het echte probleem dat opgelost moet worden — en het heeft de vorm van een design-tool, niet van een model."}]}, {"id": "pitfalls", "heading": "Valkuilen, en hoe je de “AI slop”-look vermijdt", "blocks": [{"kind": "p", "text": "De meest voorkomende klacht over door Cursor gegenereerd design is dat het generiek oogt — zachte gradiënten, zwevende panelen, te grote afgeronde hoeken, dramatische schaduwen, een Inter-en-paars-sfeer die “schreeuwt dat een AI dit maakte.” Andere gemelde problemen zijn layouts die breken op mobiel en instructies die in de UI-tekst lekken."}, {"kind": "steps", "items": [{"label": "Voeg een design-skill toe", "body": "Een samengestelde esthetische skill dwingt Cursor zich op een echte richting vast te leggen in plaats van de standaard look."}, {"label": "Gebruik de preview om te verifiëren", "body": "Render en controleer jezelf over breakpoints heen in de preview in de editor, zodat layouts niet stilletjes breken op mobiel."}, {"label": "Lever tokens en referenties aan", "body": "Echte design-tokens en referentie-screenshots zijn de grootste hefboom op de outputkwaliteit."}, {"label": "Leg regels vast in `.cursor/rules`", "body": "Zet stijlregels als “geen hero cards, maximaal twee lettertypen, merk-eerste hiërarchie” daar waar de agent ze elke ronde leest."}]}, {"kind": "p", "text": "Merk op dat elke remedie draait om het geven van een samengestelde designcontext aan de agent. Die context met de hand onderhouden, per project, is precies het sleurwerk dat Open Design wegneemt."}]}, {"id": "open-design", "heading": "Designen met Cursor binnen Open Design", "blocks": [{"kind": "p", "text": "Open Design is de open-source designlaag waar de workflow hierboven steeds om vraagt. Het behandelt Cursor als een first-party adapter en omhult hem met een samengestelde bibliotheek van skills en design systems, een gestructureerde render-pipeline en een lokale desktop-UI — zodat de designcontext die Cursor goed maakt er vanaf de eerste run is, niet elke keer met de hand samengesteld."}, {"kind": "ol", "items": ["Installeer Open Design en kies Cursor als je agent.", "Authenticeer met je Cursor-account of je eigen model-keys (BYOK) — credentials blijven op je machine en worden nooit via ons doorgesluisd.", "Kies een design system en een skill, en genereer vervolgens decks, prototypes en landingspagina's met consistente smaak.", "Elk artefact en DESIGN.md-bestand staat in je eigen repo, niet in een gehoste cloud."]}, {"kind": "p", "text": "Dezelfde Cursor-agent, dezelfde key — plus een echte, draagbare, open-source design-workflow eromheen. Het is local-first en Apache-2.0, dus niets over je werk of je credentials verlaat je machine."}]}], "faqTitle": "Veelgestelde vragen", "faq": [{"name": "Kan Cursor echt designwerk doen?", "text": "Ja — met een design-skill, een design system en echte referentiebeelden in context produceert Cursor responsieve UI van productiekwaliteit, en met de preview in de editor kun je die visueel verifiëren en verfijnen. Zonder die context neigt hij naar een generieke look, en dat is de kloof die Open Design dicht."}, {"name": "Is dit een officieel Cursor-product?", "text": "Nee. Open Design is een onafhankelijk open-source project dat Cursor integreert als agent. Het vult Cursor aan met een local-first, open bibliotheek van skills en design systems."}, {"name": "Heb ik een Cursor-abonnement nodig om te designen met Cursor?", "text": "Je kunt een Cursor-account / -abonnement gebruiken of je eigen model-keys meebrengen (BYOK). Open Design sluist je credentials hoe dan ook nooit door — ze worden direct gebruikt door je agent."}, {"name": "Cursor of Claude Code voor frontend-design?", "text": "Beide zijn sterk. Claude Code staat bekend om specifieke, codebase-bewuste designbeslissingen; Cursors voorsprong is zijn strakke build-and-see-lus met een live preview in de editor. Veel teams gebruiken beide — met Open Design wissel je van agent zonder je design-workflow te veranderen."}, {"name": "Hoe verbind ik Cursor met Figma?", "text": "Voeg de officiële Figma MCP-server toe in Cursor, plak dan een Figma-frame-link in de chat en vraag Cursor die te implementeren. De server stelt echte componenten, variabelen en layout-data beschikbaar zodat de gegenereerde code het brondesign evenaart."}, {"name": "Hoe vermijd ik de generieke “AI slop”-esthetiek?", "text": "Voeg een design-skill toe, lever echte design-tokens en referentie-screenshots aan, leg merkregels vast in `.cursor/rules` of `AGENTS.md`, en verifieer over breakpoints heen in de preview. Open Design levert deze als een samengestelde bibliotheek, zodat je de setup per project overslaat."}, {"name": "Is Open Design gelieerd aan Cursor of Anysphere?", "text": "Nee. Cursor is een product van Anysphere; Open Design is een onafhankelijk open-source project dat hem ondersteunt als first-party adapter. Cursor en Anysphere zijn handelsmerken van Anysphere, Inc."}, {"name": "Zijn mijn bestanden en credentials veilig?", "text": "Ja — Open Design is local-first. Je bestanden, artefacten en DESIGN.md blijven in je eigen repo, en je Cursor- of model-credentials worden direct gebruikt door je agent, nooit via Open Design-servers geleid."}], "ctaTitle": "Design met Cursor, op de open manier.", "ctaBody": "Neem je eigen Cursor-account of model-keys mee, houd elk bestand lokaal, en krijg een samengestelde design-bibliotheek rondom de agent die je al gebruikt.", "ctaActions": [{"label": "Gebruik Cursor binnen Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Geef een ster op GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Download de desktop-app", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Bekijk alle ondersteunde agents"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode voor design — Open Design", + description: "Hoe mensen OpenCode gebruiken voor UI- en webdesign — design.md-bestanden, UI/UX-skills, Figma MCP — en hoe Open Design er een local-first, open-source design-agent van maakt.", + breadcrumb: "OpenCode", + label: "Agent · OpenCode", + heading: "OpenCode voor design.", + lead: "OpenCode is de open-source terminal-AI-coding-agent. Designers schroeven er design-skills en DESIGN.md-bestanden op om echte UI te genereren. Open Design maakt daar een gestructureerde, open-source workflow van — neem je provider-keys mee en houd alles lokaal.", + rich: {"heroCtaLead": "Open Design maakt van OpenCode een local-first, open-source design-agent — elk model dat je kiest met je eigen provider-key, je bestanden, en een samengestelde bibliotheek van skills en design systems eromheen.", "heroCtaActions": [{"label": "Gebruik OpenCode binnen Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Geef een ster op GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Download de desktop-app", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode is een open-source, terminal-first AI-coding-agent die bewust modelonafhankelijk is: je neemt je eigen provider-key mee en draait welk model je maar wilt achter dezelfde workflow. Die openheid maakt hem een natuurlijke basis voor designwerk — maar zoals elke agent levert hij alleen goede UI wanneer je hem de juiste referenties, skills en een verificatielus geeft. Dit is een praktische, end-to-end gids voor het gebruik van OpenCode voor UI-, frontend- en design-system-werk, en voor het inbedden ervan in een gestructureerde design-workflow met Open Design.", "Het behandelt wat OpenCode precies is, waarom een modelonafhankelijke open agent goed past bij design, hoe je hem vanaf nul opzet, de screenshot-naar-UI-lus, hoe AGENTS.md en MCP hem uitbreiden, hoe hij zich verhoudt tot Codex, Claude Code en Cursor, de valkuilen die AI-output generiek doen ogen, en hoe Open Design de kloof dicht als een open, local-first designlaag — een natuurlijke combinatie, want beide projecten zijn open-source en draaien op je eigen machine."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "Feedbacklus van OpenCode-design: een terminal-TUI-agent, een browser die de UI rendert, en een werkruimte, met een feedbackpijl die terugloopt", "caption": "De kernlus: OpenCode bouwt UI in de terminal, rendert en verifieert die in een echte browser, en itereert tegen je referenties — op welk model je ook kiest."}, "tocLabel": "Op deze pagina", "toc": [{"id": "what-is-opencode", "label": "Wat OpenCode precies is"}, {"id": "why-design", "label": "Waarom een open, elk-model-agent past bij design"}, {"id": "setup", "label": "OpenCode instellen voor design (vanaf nul)"}, {"id": "screenshot-workflow", "label": "De screenshot-naar-UI-workflow"}, {"id": "extend", "label": "AGENTS.md, MCP en deelbare sessies"}, {"id": "vs", "label": "OpenCode vs Codex vs Claude Code vs Cursor"}, {"id": "pitfalls", "label": "Valkuilen en de “AI slop”-look"}, {"id": "open-design", "label": "Designen met OpenCode in Open Design"}, {"id": "faq", "label": "FAQ"}], "sections": [{"id": "what-is-opencode", "heading": "Wat OpenCode precies is", "blocks": [{"kind": "p", "text": "OpenCode is een open-source AI-coding-agent gebouwd voor de terminal, onderhouden door het team achter SST (Anomaly Innovations). Hij leest je repository, voert commando's uit, bewerkt bestanden en praat met een large language model — maar anders dan leverancier-gebonden agents levert hij geen eigen model. Je richt hem op welke provider en welk model je maar wilt en neemt je eigen key mee."}, {"kind": "p", "text": "Hij draait als een terminal-UI (TUI), met een desktop-app en IDE-extensies bovenop dezelfde engine. Onder de motorkap gebruikt hij een client/server-architectuur, zodat de agent die het werk doet losgekoppeld is van de vorm waarmee je hem aanstuurt. Twee ingebouwde agents — build en plan — wissel je met de Tab-toets."}, {"kind": "steps", "items": [{"label": "Modelonafhankelijk", "body": "Modellen en providers komen van models.dev, een open catalogus. Je configureert ze in opencode.json met een provider/model-id-string en kunt providers die je niet geladen wilt hebben uitschakelen — zodat dezelfde design-workflow draait op Anthropic, OpenAI, Google, OpenRouter, lokale modellen en meer."}, {"label": "Instructiebestand", "body": "OpenCode leest een AGENTS.md-bestand in je project (de cross-tool-standaard, ook compatibel met CLAUDE.md) voor projectregels — de natuurlijke plek om je designconventies vast te leggen. Draai /init om er een te genereren."}, {"label": "Uitbreidbaar", "body": "Hij ondersteunt LSP-integratie, MCP-servers, thema's, keybinds en custom commando's, plus deelbare sessielinks voor samenwerking."}]}, {"kind": "ul", "items": ["Maintainer: SST / Anomaly Innovations (open-source project)", "Credential: je eigen API-key(s) voor model-providers — BYOK, geen vendor lock-in", "Licentie: MIT, open source"]}]}, {"id": "why-design", "heading": "Waarom een open, elk-model-agent past bij designwerk", "blocks": [{"kind": "p", "text": "OpenCode heeft geen enkel “design-model” zoals een leverancier-agent dat heeft — en dat is precies het punt. Omdat hij modelonafhankelijk en open is, kun je dezelfde design-workflow draaien op welk model op dit moment het best is in frontend, hem later vervangen, of terugvallen op een lokaal model, allemaal zonder je setup te veranderen."}, {"kind": "p", "text": "Maar modelkeuze alleen koopt geen smaak. Zoals elke coding-agent produceert OpenCode generieke UI tenzij je hem beperkingen geeft. Goede design-output komt voort uit drie inputs die jij aanlevert."}, {"kind": "steps", "items": [{"label": "Een design system", "body": "Echte tokens, primitives en conventies die de agent hergebruikt, zodat de output bij een merk past in plaats van terug te vallen op een generieke look."}, {"label": "Een esthetische skill", "body": "Een samengestelde skill die echte smaak afdwingt — ingetogen beweging, merk-eerste hiërarchie, hooguit twee lettertypen en één accentkleur — en de agent zich op een richting laat vastleggen voordat hij bouwt."}, {"label": "Concrete referenties", "body": "Echte referentiebeelden en meerdere states (desktop en mobiel, hover, leeg, laden), niet één enkele hero-shot."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Diagram dat laat zien hoe design system, skill en referentiebeeld samenkomen tot goede design-output", "caption": "Smaak komt voort uit drie inputs die jij aanlevert: een design system, een skill en echte referentiebeelden — onafhankelijk van welk model je draait."}, {"kind": "p", "text": "De les: OpenCode geeft je modelvrijheid, maar smaak komt nog steeds voort uit een samengestelde designcontext. Open Design verpakt precies die inputs, en daarom passen de twee samen — beide zijn open-source en local-first (meer hieronder)."}]}, {"id": "setup", "heading": "OpenCode voor designwerk opzetten, vanaf nul", "blocks": [{"kind": "p", "text": "Dit is het volledige pad van een schone machine naar een OpenCode die UI kan bouwen en verifiëren."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Setupflow in vijf stappen: installeren, authenticeren met je provider-key, AGENTS.md configureren, een skill toevoegen, verifiëren", "caption": "De setup-volgorde: installeren → authenticeren (je provider-key) → AGENTS.md configureren → een skill toevoegen → verifiëren in een echte browser."}, {"kind": "steps", "items": [{"label": "Leg je designregels vast", "body": "Zet je tokens, primitives en conventies in AGENTS.md (of een DESIGN.md die daaruit wordt aangehaald) zodat de output bij een merk past in plaats van terug te vallen op een generieke look. De instructions-optie in opencode.json kan via globs naar extra regelbestanden verwijzen."}, {"label": "Kies een capabel model", "body": "Omdat OpenCode modelonafhankelijk is, kies je welke provider/model op dit moment het sterkst is in frontend voor de design-ronde — en houd je de rest van je workflow onveranderd."}]}]}, {"id": "screenshot-workflow", "heading": "De screenshot-naar-UI-workflow", "blocks": [{"kind": "p", "text": "De design-lus met de meeste hefboomwerking bij elke agent is een referentiebeeld omzetten in werkende, responsieve UI en itereren tot het klopt. Dezelfde vijfstappenvorm geldt in OpenCode."}, {"kind": "ol", "items": ["Begin met de helderste visuele referenties die je hebt — en neem meerdere states mee (desktop en mobiel, hover, leeg, laden), niet alleen één hero-shot.", "Wees specifiek in de prompt; vage prompts leveren generieke UI op.", "Bereid een design system voor en vertel OpenCode waar de tokens en canonieke primitives staan (in AGENTS.md).", "Draai een dev-server en laat de agent in een echte browser renderen, met herschaling naar breakpoints om het resultaat te controleren.", "Itereer door OpenCode zijn implementatie terug te laten vergelijken met de screenshots — niet alleen te bevestigen dat het bouwt."]}, {"kind": "p", "text": "Verwijs naar bestanden met @ in de TUI voor een fuzzy-zoekopdracht in je werkmap, voer shell-commando's inline uit met een voorafgaande !, en stuur acties aan met /-commando's. Prompt dan met concrete beperkingen:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Houd prompts klein en gericht, commit goede iteraties en draai slechte terug (vertel OpenCode wanneer je terugdraait), zodat elke ronde voortbouwt op een schone basis."}]}, {"id": "extend", "heading": "AGENTS.md, MCP en deelbare sessies", "blocks": [{"kind": "p", "text": "Drie uitbreidingspunten maken OpenCode praktisch voor langdurig designwerk, en alle drie sluiten naadloos aan op een open design-workflow."}, {"kind": "steps", "items": [{"label": "AGENTS.md-regels", "body": "Projectregels staan in een AGENTS.md in de repo-root (of globale regels in ~/.config/opencode/AGENTS.md). Het is de duurzame thuisbasis voor je designconventies, gelezen bij elke ronde, en compatibel met de CLAUDE.md-bestanden die andere agents gebruiken."}, {"label": "MCP-servers", "body": "OpenCode ondersteunt zowel lokale (command) als remote (URL) MCP-servers, geconfigureerd onder de mcp-sleutel — de draagbare manier om designcontext en externe tools binnen te halen die over agents heen werken, niet alleen in OpenCode."}, {"label": "Deelbare sessies", "body": "Het /share-commando maakt een publieke link naar een gesprek voor samenwerking of review, en /unshare trekt die in — handig om feedback te krijgen op een design-ronde."}]}, {"kind": "p", "text": "Dit zijn draagbare, multi-agent-capaciteiten — precies het soort dingen die Open Design is gebouwd om te orkestreren, in plaats van per project opnieuw te creëren."}]}, {"id": "vs", "heading": "OpenCode vs Codex vs Claude Code vs Cursor voor design", "blocks": [{"kind": "p", "text": "Er is geen enkele winnaar voor designwerk — elke agent heeft een andere kracht, en ervaren teams stapelen ze. Een eerlijke samenvatting:"}, {"kind": "table", "columns": ["Agent", "Design-kracht", "Beste voor"], "rows": [["OpenCode", "Open-source en modelonafhankelijk; draai elke provider achter één terminal-workflow", "BYOK-vrijheid, modellen wisselen, volledig open en local-first setups"], ["Codex", "Sterke visuele afwerking met een frontend-skill; beeldbegrip", "Gedelegeerd async, gesandboxte builds, draagbare AGENTS.md-regels"], ["Claude Code", "Specifieke designbeslissingen (hex, spacing, type) en codebase-bewuste UX", "Frontend-redeneren en refactors met grote context"], ["Cursor", "Visuele build-and-see-lus met live preview en inline edits", "Strak itereren-en-bekijken van UI-werk binnen een IDE"]]}, {"kind": "p", "text": "Het terugkerende oordeel van de community is dat smaak van mensen komt: ze vallen allemaal zonder skills, referenties en beperkingen terug op een generieke esthetiek. Dat is het echte probleem dat opgelost moet worden — en het heeft de vorm van een design-tool, niet van een model, en precies daarom past een open agent als OpenCode zo goed bij een open designlaag."}]}, {"id": "pitfalls", "heading": "Valkuilen, en hoe je de “AI slop”-look vermijdt", "blocks": [{"kind": "p", "text": "De meest voorkomende klacht over AI-gegenereerd design is dat het generiek oogt — zachte gradiënten, zwevende panelen, te grote afgeronde hoeken, dramatische schaduwen, een Inter-en-paars-sfeer die “schreeuwt dat een AI dit maakte.” Andere gemelde problemen zijn kapotte mobiele layouts en instructies die in de UI-tekst lekken. Geen van deze is uniek voor OpenCode; ze zijn wat er gebeurt wanneer welke agent dan ook draait zonder een samengestelde designcontext."}, {"kind": "steps", "items": [{"label": "Voeg een esthetische skill toe", "body": "Een samengestelde design-skill dwingt de agent zich op een echte richting vast te leggen in plaats van de standaard look."}, {"label": "Verifieer in een echte browser", "body": "Render en controleer jezelf over breakpoints heen, zodat layouts niet stilletjes breken op mobiel."}, {"label": "Lever tokens en referenties aan", "body": "Echte design-tokens en referentie-screenshots zijn de grootste hefboom op de outputkwaliteit."}, {"label": "Leg regels vast in AGENTS.md", "body": "Zet stijlregels als “geen hero cards, maximaal twee lettertypen, merk-eerste hiërarchie” daar waar de agent ze elke ronde leest."}]}, {"kind": "p", "text": "Merk op dat elke remedie draait om het geven van een samengestelde designcontext aan de agent — ongeacht welk model je draait. Die context met de hand onderhouden, per project, is precies het sleurwerk dat Open Design wegneemt."}]}, {"id": "open-design", "heading": "Designen met OpenCode binnen Open Design", "blocks": [{"kind": "p", "text": "Open Design is de open-source designlaag waar de workflow hierboven steeds om vraagt. Het behandelt OpenCode als een first-party adapter en omhult hem met een samengestelde bibliotheek van skills en design systems, een gestructureerde render-pipeline en een lokale desktop-UI — zodat de designcontext die elke agent goed maakt er vanaf de eerste run is, niet elke keer met de hand samengesteld. Beide projecten zijn open-source en local-first, wat de combinatie een natuurlijke match maakt."}, {"kind": "ol", "items": ["Installeer Open Design en kies OpenCode als je agent.", "Authenticeer met je eigen API-key voor model-providers (BYOK) — credentials blijven op je machine en worden nooit via ons doorgesluisd.", "Kies een willekeurige provider en model, plus een design system en een skill, en genereer vervolgens decks, prototypes en landingspagina's met consistente smaak.", "Elk artefact en DESIGN.md-bestand staat in je eigen repo, niet in een gehoste cloud."]}, {"kind": "p", "text": "Dezelfde OpenCode-agent, dezelfde modelvrijheid — plus een echte, draagbare, open-source design-workflow eromheen. Het is local-first en Apache-2.0, dus niets over je werk of je credentials verlaat je machine."}]}], "faqTitle": "Veelgestelde vragen", "faq": [{"name": "Kan OpenCode echt designwerk doen?", "text": "Ja — met een esthetische skill, een design system en echte referentiebeelden in context produceert OpenCode responsieve UI van productiekwaliteit en kan hij die in een browser verifiëren. Omdat hij modelonafhankelijk is, draai je welk model op dit moment het best is in frontend. Zonder die samengestelde context neigt hij naar een generieke look, en dat is de kloof die Open Design dicht."}, {"name": "Welk model moet ik gebruiken met OpenCode voor design?", "text": "Welk je maar wilt — OpenCode is provider-onafhankelijk via models.dev, dus je kunt Anthropic, OpenAI, Google, OpenRouter of lokale modellen achter dezelfde workflow draaien en op elk moment wisselen. De kwaliteit van de design-output hangt veel meer af van je skill, design system en referenties dan van het model alleen."}, {"name": "Is Open Design gemaakt door het OpenCode-team (SST)?", "text": "Nee. Open Design is een onafhankelijk open-source project dat OpenCode integreert als agent. Het vult OpenCode aan met een local-first, open bibliotheek van skills en design systems."}, {"name": "Heb ik een speciaal abonnement nodig om te designen met OpenCode?", "text": "Nee — OpenCode is BYOK. Je neemt je eigen API-key voor model-providers mee, en Open Design sluist je credentials nooit door. Er is geen vendor lock-in."}, {"name": "OpenCode of Codex of Claude Code voor frontend-design?", "text": "Alle zijn sterk, en veel teams stapelen ze. OpenCode's voorsprong is dat hij volledig open-source en modelonafhankelijk is; Codex blinkt uit in gedelegeerde, gesandboxte builds; Claude Code staat bekend om specifieke, codebase-bewuste designbeslissingen. Met Open Design wissel je van agent zonder je design-workflow te veranderen."}, {"name": "Hoe breid ik OpenCode uit voor designcontext?", "text": "Leg regels vast in AGENTS.md, voeg MCP-servers toe onder de mcp-sleutel voor draagbare tools en designcontext, en gebruik deelbare sessies voor review. Open Design levert een samengestelde bibliotheek van skills en design systems zodat je de setup per project overslaat."}, {"name": "Is Open Design gelieerd aan OpenCode of SST?", "text": "Nee. OpenCode is een open-source project onderhouden door SST (Anomaly Innovations); Open Design is een onafhankelijk open-source project dat hem ondersteunt als first-party adapter."}, {"name": "Zijn mijn bestanden en credentials veilig?", "text": "Ja — Open Design is local-first. Je bestanden, artefacten en DESIGN.md blijven in je eigen repo, en je credentials voor model-providers worden direct gebruikt door je agent, nooit via Open Design-servers geleid."}], "ctaTitle": "Design met OpenCode, op de open manier.", "ctaBody": "Neem je eigen key voor model-providers mee, houd elk bestand lokaal, en krijg een samengestelde design-bibliotheek rondom de open agent die je al gebruikt.", "ctaActions": [{"label": "Gebruik OpenCode binnen Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Geef een ster op GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Download de desktop-app", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Bekijk alle ondersteunde agents"}, + }, + }, + 'ar': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code للتصميم — Open Design", + description: "كيف يستخدم المصممون Claude Code في تصميم الواجهات والويب، وكيف يحوّله Open Design إلى وكيل تصميم حقيقي — محلي أولًا، بمبدأ BYOK، مع مكتبة منسّقة من الـ skills وأنظمة التصميم.", + breadcrumb: "Claude Code", + label: "وكيل · Claude Code", + heading: "Claude Code للتصميم.", + lead: "‏Claude Code هو وكيل البرمجة الطرفي من Anthropic. يستخدمه الناس بالفعل لبناء الواجهات وأنظمة التصميم وصفحات الهبوط. يربطه Open Design بسير عمل تصميمي حقيقي — أحضر مفتاح Anthropic أو اشتراك Claude، واحتفظ بكل ملف محليًا.", + rich: {"heroCtaLead": "يحوّل Open Design الأداة Claude Code إلى وكيل تصميم محلي أولًا ومفتوح المصدر — مفتاح Anthropic أو اشتراك Claude الخاص بك، وملفاتك، ومكتبة منسّقة من الـ skills وأنظمة التصميم تحيط بها.", "heroCtaActions": [{"label": "استخدم Claude Code داخل Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "ضع نجمة على GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "نزّل تطبيق سطح المكتب", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["يُعدّ Claude Code على نطاق واسع وكيل البرمجة صاحب الذوق الأفضل في عمل الواجهات الأمامية — فهو يحلّل الواجهات بدقة غير معتادة، ويسمّي قيم hex بالضبط والمسافات وسلالم الخطوط، ويعيد هيكلة الواجهة عبر قاعدة شيفرة كبيرة دون أن يفقد الخيط. لكنه افتراضيًا يظل ينحرف نحو مظهر عام ما لم تزوّده بنظام تصميم وskills ومراجع حقيقية. هذا دليل عملي وشامل لاستخدام Claude Code في عمل الواجهات والواجهة الأمامية وأنظمة التصميم، ولربطه بسير عمل منظّم عبر Open Design.", "يغطّي ما هو Claude Code فعلًا، ولماذا هو قوي في الواجهة الأمامية، وكيف تعدّه من الصفر، وسير عمل CLAUDE.md والـ Skills، والتكامل الرسمي ثنائي الاتجاه مع Figma، وكيف يقارَن بـ Codex وCursor، والمزالق التي تجعل مخرجات الذكاء الاصطناعي تبدو عامة، وكيف يسدّ Open Design الفجوة بصفته طبقة تصميم مفتوحة ومحلية أولًا."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "حلقة تغذية راجعة لتصميم Claude Code: وكيل طرفي يتخذ قرارات تصميم محددة، ومتصفح يعرض الواجهة، ومساحة عمل، مع سهم تغذية راجعة يعود إلى البداية", "caption": "الحلقة الأساسية: يحلّل Claude Code قرارات الواجهة المحددة في الطرفية، ويعرضها ويتحقق منها في متصفح حقيقي، ويتقارب نحو مراجعك."}, "tocLabel": "في هذه الصفحة", "toc": [{"id": "what-is-claude-code", "label": "ما هو Claude Code فعلًا"}, {"id": "why-design", "label": "لماذا يجيد Claude Code التصميم"}, {"id": "setup", "label": "إعداد Claude Code للتصميم (من الصفر)"}, {"id": "skills-workflow", "label": "سير عمل CLAUDE.md والـ Skills"}, {"id": "figma", "label": "التكامل ثنائي الاتجاه بين Claude Code وFigma"}, {"id": "vs", "label": "‏Claude Code مقابل Codex مقابل Cursor"}, {"id": "pitfalls", "label": "المزالق ومظهر «فوضى الذكاء الاصطناعي»"}, {"id": "open-design", "label": "التصميم بـ Claude Code داخل Open Design"}, {"id": "faq", "label": "الأسئلة الشائعة"}], "sections": [{"id": "what-is-claude-code", "heading": "ما هو Claude Code فعلًا", "blocks": [{"kind": "p", "text": "‏Claude Code هو أداة البرمجة الوكيلة من Anthropic. يقرأ قاعدة شيفرتك، ويحرّر الملفات، ويشغّل الأوامر، ويتكامل مع أدوات التطوير لديك — مخطِّطًا وكاتبًا ومتحققًا من العمل انطلاقًا من مهام باللغة الطبيعية بدلًا من مجرد إكمال السطور تلقائيًا."}, {"kind": "p", "text": "يأتي عبر عدة واجهات تشترك جميعها في المحرك نفسه: واجهة سطر أوامر طرفية، وإضافات لبيئات التطوير VS Code وCursor وJetBrains، وتطبيق سطح مكتب بمراجعة فروقات مرئية، وتجربة ويب للمهام الطويلة. وتنتقل ملفات CLAUDE.md وإعداداتك وخوادم MCP عبرها كلها."}, {"kind": "steps", "items": [{"label": "ملف التعليمات", "body": "يقرأ Claude Code ملف CLAUDE.md في جذر مشروعك في بداية كل جلسة — المكان الطبيعي لترميز أعراف التصميم لديك والـ tokens وقوائم المراجعة."}, {"label": "الـ Skills", "body": "تجمع Agent Skills تعليمات وسكربتات وموارد قابلة للتكرار يحمّلها Claude عند الطلب، بما في ذلك Frontend Design skill الرسمي من Anthropic للذوق."}, {"label": "التخطيط والوكلاء الفرعيون", "body": "يمكنه التخطيط قبل التنفيذ وإنشاء وكلاء فرعيين يعملون على أجزاء مختلفة من المهمة بالتوازي، ما يحافظ على تماسك إعادة هيكلة الواجهات الكبيرة."}]}, {"kind": "ul", "items": ["المزوِّد: Anthropic", "بيانات الاعتماد: مفتاح Anthropic API (مبدأ BYOK، عبر الـ Console) أو اشتراك Claude (Pro / Max)", "الواجهات: واجهة سطر أوامر طرفية، إضافات VS Code / Cursor / JetBrains، تطبيق سطح مكتب، ويب"]}]}, {"id": "why-design", "heading": "لماذا يجيد Claude Code التصميم", "blocks": [{"kind": "p", "text": "من بين وكلاء البرمجة، يتمتع Claude Code بسمعة الذوق في عمل الواجهات الأمامية. تفسّر ذلك بضعة أمور."}, {"kind": "steps", "items": [{"label": "قرارات محددة لا غامضة", "body": "يميل Claude Code إلى الالتزام بخيارات ملموسة — قيم hex بالضبط، وسلالم المسافات، وتدرّجات الخطوط، وهرمية المكوّنات — بدلًا من التهرّب، وهذا ما يميّز واجهة حقيقية عن مجرد عنصر نائب."}, {"label": "تفكير واعٍ بقاعدة الشيفرة", "body": "بفضل سياق عمل واسع، يعيد هيكلة الواجهة عبر ملفات كثيرة دفعة واحدة، معيدًا استخدام مكوّناتك وtokens الموجودة بدلًا من ابتكار أنماط لمرة واحدة."}, {"label": "skill رسمي للواجهة الأمامية", "body": "تقدّم Anthropic مهارة Frontend Design تجعل Claude يكتب اتجاهًا تصميميًا أولًا، وتبتعد عمدًا عن خطوط النظام العامة والتدرّجات البنفسجية المتوقّعة."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "رسم تخطيطي يوضّح تقارب نظام التصميم والـ skill والصورة المرجعية نحو مخرجات تصميم جيدة", "caption": "ينبع الذوق من ثلاثة مدخلات تقدّمها أنت: نظام تصميم، وskill، وصور مرجعية حقيقية."}, {"kind": "p", "text": "الدرس هو نفسه الذي تقوله Anthropic عن نماذجها: لا يملك Claude ذوقًا افتراضيًا — وإذا تُرك وحده يتقارب نحو المركز الإحصائي لتصميم الويب (Inter، تدرّجات بنفسجية، ظلال ناعمة). إنه ينتج تصميمًا جيدًا حين تمنحه قيودًا. ويجمع Open Design تلك المدخلات بالضبط، ولهذا يتلاءم الاثنان معًا (المزيد أدناه)."}]}, {"id": "setup", "heading": "إعداد Claude Code لعمل التصميم، من الصفر", "blocks": [{"kind": "p", "text": "هذا هو المسار الكامل من جهاز نظيف إلى Claude Code قادر على بناء الواجهة والتحقق منها."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "سير إعداد من خمس خطوات: التثبيت، المصادقة، تهيئة CLAUDE.md، إضافة الـ skill، التحقق", "caption": "تسلسل الإعداد: التثبيت ← المصادقة ← تهيئة CLAUDE.md ← إضافة Frontend Design skill ← تفعيل التحقق في المتصفح."}, {"kind": "steps", "items": [{"label": "رمّز قواعد التصميم لديك", "body": "ضع tokens وعناصرك الأولية وأعرافك في CLAUDE.md ووجّه Claude إليها، كي تطابق المخرجات هوية علامة بدلًا من العودة إلى مظهر عام."}, {"label": "أضف التحقق في المتصفح", "body": "اربط Playwright أو Chrome MCP كي يعرض Claude في متصفح حقيقي ويتحقق من مخرجاته عبر نقاط التوقف بدلًا من مجرد تأكيد نجاح البناء."}]}]}, {"id": "skills-workflow", "heading": "سير عمل CLAUDE.md والـ Skills", "blocks": [{"kind": "p", "text": "أعلى حلقات التصميم رافعةً مع Claude Code هي تغذيته بمراجع حقيقية إضافةً إلى سياق التصميم لديك، ثم التكرار حتى تطابق الواجهة — مع حمل CLAUDE.md والـ Skills للقيود كي لا تعيد شرحها في كل مطالبة."}, {"kind": "ol", "items": ["ابدأ من أوضح المراجع البصرية لديك — وضمّن حالات متعددة (سطح المكتب والجوال، التحويم، الفارغ، التحميل)، لا لقطة بطل واحدة فقط.", "كن محددًا في المطالبة؛ فالمطالبات الغامضة تنتج واجهة عامة حتى مع وكيل قوي.", "احتفظ بنظام تصميمك وأعرافك في CLAUDE.md، وأخبر Claude بمكان الـ tokens والعناصر الأولية المرجعية.", "أضف Frontend Design skill كي يلتزم Claude باتجاه جمالي حقيقي قبل كتابة الشيفرة.", "اربط التحقق في المتصفح كي يعرض Claude، ويغيّر الحجم إلى نقاط التوقف، ويقارن بالمراجع — لا أن يكتفي بتأكيد البناء."]}, {"kind": "p", "text": "أسقِط صورة مرجعية في الجلسة وأرسِل مطالبة بقيود ملموسة:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "شغّل خادم تطوير بالتوازي، وأبقِ المطالبات صغيرة ومركّزة، وثبّت التكرارات الجيدة / وأرجِع السيئة (مع إخبار Claude حين تُرجِع) كي تبني كل تمريرة على قاعدة نظيفة. استخدم وضع التخطيط لإعادة الهيكلة الأكبر كي تراجع المنهج قبل أي تغيير على الملفات."}]}, {"id": "figma", "heading": "‏Claude Code + Figma: تكامل ثنائي الاتجاه بين التصميم والشيفرة", "blocks": [{"kind": "p", "text": "في فبراير 2026 أطلقت Anthropic وFigma تكاملًا متقدّمًا ثنائي الاتجاه عبر خادم Figma MCP. وهو يعمل في الاتجاهين."}, {"kind": "steps", "items": [{"label": "التصميم ← الشيفرة", "body": "حدّد إطارًا في Figma أو الصق رابطًا في Claude Code، واسحب سياق التصميم، واطلب منه تنفيذ التصميم باستخدام مكتبة مكوّناتك الموجودة. ويبقي Code Connect المخرجات متوائمة مع مكوّناتك الحقيقية."}, {"label": "الشيفرة ← التصميم", "body": "ابنِ ميزة وعاينها في المتصفح، ثم قل «Send this to Figma» لالتقاط الواجهة قيد التشغيل بصفتها طبقات Figma قابلة للتحرير — الشاشة كاملةً أو عنصرًا محددًا."}]}, {"kind": "p", "text": "ثبّته مرة واحدة عبر claude plugin install figma@claude-plugins-official (يتطلب Dev Mode MCP خطة Figma مدفوعة). وخادم Figma MCP نفسه متاح لـ Claude Code وCodex وCursor وVS Code — وهو تمامًا نوع القدرة المحمولة متعددة الوكلاء التي بُني Open Design لتنسيقها."}]}, {"id": "vs", "heading": "‏Claude Code مقابل Codex مقابل Cursor للتصميم", "blocks": [{"kind": "p", "text": "لا يوجد فائز واحد في عمل التصميم — فلكل وكيل قوة مختلفة، والفرق المتمرّسة تجمع بينها. وإليك خلاصة منصفة:"}, {"kind": "table", "columns": ["الوكيل", "قوة التصميم", "الأنسب لـ"], "rows": [["Claude Code", "قرارات تصميم محددة (hex، مسافات، خطوط) وتفكير في تجربة المستخدم واعٍ بقاعدة الشيفرة", "تفكير الواجهة الأمامية وإعادة الهيكلة بسياق واسع"], ["Codex", "صقل بصري قوي وفهم للصور؛ عمليات بناء غير متزامنة في بيئة معزولة", "عمليات البناء غير المتزامنة المفوّضة وقواعد AGENTS.md المحمولة"], ["Cursor", "حلقة بناء-ومشاهدة بصرية مع معاينة حيّة وتحريرات مضمّنة", "عمل واجهة محكم بالتكرار-والمراقبة داخل بيئة تطوير"]]}, {"kind": "p", "text": "الحكم المتكرر في المجتمع أن الذوق يأتي من البشر: فجميعها تتجه افتراضيًا إلى مظهر عام دون skills ومراجع وقيود. تلك هي المشكلة الحقيقية التي ينبغي حلّها — وهي بشكل أداة تصميم، لا بشكل نموذج."}]}, {"id": "pitfalls", "heading": "المزالق، وكيف تتجنّب مظهر «فوضى الذكاء الاصطناعي»", "blocks": [{"kind": "p", "text": "حتى مع سمعة Claude Code في الذوق، فإن أكثر شكوى شيوعًا عن التصميم المولَّد بالذكاء الاصطناعي أنه يبدو عامًا — خطوط Inter، تدرّجات بنفسجية على أبيض، ظلال ناعمة، زوايا دائرية مفرطة الحجم، جماليّة «تصرخ بأن ذكاءً اصطناعيًا صنع هذا.» وتعزو Anthropic نفسها ذلك إلى التقارب التوزيعي: الخيارات الآمنة تهيمن على بيانات تدريب الويب. وتشمل المشكلات الأخرى المبلَّغ عنها انكسار تخطيطات الجوال وتسرّب التعليمات إلى نصوص الواجهة."}, {"kind": "steps", "items": [{"label": "ثبّت Frontend Design skill", "body": "يجبر Claude على الالتزام باتجاه حقيقي ويتجنّب صراحةً الخطوط والتدرّجات المفرَطة الاستخدام من الذكاء الاصطناعي."}, {"label": "فعّل التحقق في المتصفح", "body": "اجعل Claude يعرض ويتحقق ذاتيًا عبر نقاط التوقف كي لا تنكسر التخطيطات بصمت على الجوال."}, {"label": "زوّده بالـ tokens والمراجع", "body": "tokens التصميم الحقيقية ولقطات الشاشة المرجعية هي أكبر رافعة منفردة على جودة المخرجات."}, {"label": "رمّز القواعد في CLAUDE.md", "body": "ضع قواعد بأسلوب «لا بطاقات بطل، خطّان كحد أقصى، هرمية تقدّم العلامة» حيث يقرؤها الوكيل في كل تشغيل."}]}, {"kind": "p", "text": "لاحظ أن كل إجراء تخفيف يتمحور حول منح الوكيل سياق تصميم منسّقًا. والحفاظ على ذلك السياق يدويًا، لكل مشروع، هو الكدّ الذي يزيله Open Design."}]}, {"id": "open-design", "heading": "التصميم بـ Claude Code داخل Open Design", "blocks": [{"kind": "p", "text": "‏Open Design هو طبقة التصميم مفتوحة المصدر التي يطلبها سير العمل أعلاه باستمرار. يعامل Claude Code بصفته محوّلًا أصيلًا ويغلّفه بمكتبة منسّقة من الـ skills وأنظمة التصميم، وخط معالجة عرض منظّم، وواجهة سطح مكتب محلية — كي يكون سياق التصميم الذي يجعل Claude Code جيدًا حاضرًا من أول تشغيل، لا مُجمَّعًا يدويًا في كل مرة."}, {"kind": "ol", "items": ["ثبّت Open Design واختر Claude Code وكيلًا لك.", "صادِق بمفتاح Anthropic API (مبدأ BYOK) أو اشتراك Claude — تبقى بيانات الاعتماد على جهازك ولا تُمرَّر عبرنا أبدًا.", "اختر نظام تصميم وskill، ثم ولّد العروض والنماذج الأولية وصفحات الهبوط بذوق متّسق.", "كل أثر وكل ملف DESIGN.md يعيش في مستودعك الخاص، لا في سحابة مستضافة."]}, {"kind": "p", "text": "وكيل Claude Code نفسه، المفتاح نفسه — إضافةً إلى سير عمل تصميمي حقيقي ومحمول ومفتوح المصدر يحيط به. إنه محلي أولًا وبرخصة Apache-2.0، فلا شيء عن عملك أو بيانات اعتمادك يغادر جهازك."}]}], "faqTitle": "الأسئلة الشائعة", "faq": [{"name": "هل Claude Code جيد لعمل التصميم؟", "text": "نعم — فهو يُعدّ على نطاق واسع وكيل البرمجة صاحب الذوق الأفضل في الواجهة الأمامية، إذ يتخذ قرارات محددة وواعية بقاعدة الشيفرة بشأن قيم hex والمسافات وسلالم الخطوط. ومع Frontend Design skill ونظام تصميم وصور مرجعية حقيقية في السياق، ينتج واجهة بجودة إنتاجية ومتجاوبة ويمكنه التحقق منها في متصفح. وبدون ذلك السياق يميل إلى مظهر عام، وهي الفجوة التي يسدّها Open Design."}, {"name": "هل أحتاج إلى اشتراك Claude للتصميم بـ Claude Code؟", "text": "يمكنك استخدام مفتاح Anthropic API (مبدأ BYOK، عبر الـ Console) أو اشتراك Claude (Pro / Max). وفي كلتا الحالتين لا يمرّر Open Design بيانات اعتمادك أبدًا — فهي تُستخدَم مباشرةً بواسطة وكيلك على جهازك."}, {"name": "‏Claude Code أم Codex لتصميم الواجهة الأمامية؟", "text": "كلاهما قوي. يُعرَف Claude Code بقرارات تصميم محددة وواعية بقاعدة الشيفرة وتفكير في الواجهة الأمامية؛ ويتمتع Codex بصقل بصري قوي ويتفوّق في عمليات البناء المفوّضة المعزولة. وتستخدم فرق كثيرة كليهما — ويتيح لك Open Design تبديل الوكلاء دون تغيير سير عمل التصميم."}, {"name": "كيف أصل Claude Code بـ Figma؟", "text": "ثبّت إضافة Figma الرسمية عبر claude plugin install figma@claude-plugins-official. عندها يمكنك تنفيذ إطارات Figma في شيفرة باستخدام سياق التصميم، ودفع واجهة قيد التشغيل عائدةً إلى إطارات Figma قابلة للتحرير عبر «Send this to Figma». ويتطلب Dev Mode MCP خطة Figma مدفوعة."}, {"name": "ما هي الـ Skills وملف CLAUDE.md؟", "text": "‏CLAUDE.md ملف markdown في جذر مشروعك يقرؤه Claude Code في بداية كل جلسة — وهو المكان لترميز أعراف التصميم لديك. وتجمع الـ Skills تعليمات وموارد قابلة للتكرار يحمّلها Claude عند الطلب، بما في ذلك Frontend Design skill الرسمي من Anthropic. ويقدّم Open Design مكتبة منسّقة من الاثنين كي تتخطّى الإعداد لكل مشروع."}, {"name": "كيف أتجنّب جماليّة «فوضى الذكاء الاصطناعي» العامة؟", "text": "ثبّت Frontend Design skill، وزوّده بـ tokens تصميم حقيقية ولقطات شاشة مرجعية، ورمّز قواعد العلامة في CLAUDE.md، وفعّل التحقق في المتصفح. ويقدّم Open Design هذه بصفتها مكتبة منسّقة كي تتخطّى الإعداد لكل مشروع."}, {"name": "هل Open Design تابع لـ Anthropic؟", "text": "لا. Claude Code منتج من Anthropic؛ وOpen Design مشروع مستقل مفتوح المصدر يدعمه بصفته محوّلًا أصيلًا. وClaude وClaude Code علامتان تجاريتان لـ Anthropic."}, {"name": "هل ملفاتي وبيانات اعتمادي آمنة؟", "text": "نعم — Open Design محلي أولًا وبرخصة Apache-2.0. تبقى ملفاتك وآثارك وملف DESIGN.md في مستودعك الخاص، وتُستخدَم بيانات اعتماد Anthropic مباشرةً بواسطة وكيلك، ولا تُمرَّر عبر خوادم Open Design أبدًا."}], "ctaTitle": "صمّم بـ Claude Code، بالطريقة المفتوحة.", "ctaBody": "أحضر مفتاح Anthropic أو اشتراك Claude الخاص بك، واحتفظ بكل ملف محليًا، واحصل على مكتبة تصميم منسّقة حول الوكيل الذي تستخدمه أصلًا.", "ctaActions": [{"label": "استخدم Claude Code داخل Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "ضع نجمة على GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "نزّل تطبيق سطح المكتب", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "اعرض كل الوكلاء المدعومين"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex للتصميم — Open Design", + description: "كيف يستخدم الناس OpenAI Codex في تصميم الواجهات والويب — إضافة Product Design، تكامل Figma، skills الواجهة الأمامية — وكيف يحوّله Open Design إلى وكيل تصميم محلي أولًا ومفتوح المصدر.", + breadcrumb: "Codex", + label: "وكيل · Codex", + heading: "Codex للتصميم.", + lead: "‏Codex هو وكيل البرمجة من OpenAI. وبإضافة Product Design وتكامل Figma صار أداة تصميم جادّة. يربط Open Design الأداة Codex بسير عمل تصميمي مفتوح المصدر — مفتاح OpenAI أو اشتراك ChatGPT الخاص بك، وملفاتك، محليًا أولًا.", + rich: {"heroCtaLead": "يحوّل Open Design الأداة Codex إلى وكيل تصميم محلي أولًا ومفتوح المصدر — مفتاح OpenAI الخاص بك، وملفاتك، ومكتبة منسّقة من الـ skills وأنظمة التصميم تحيط بها.", "heroCtaActions": [{"label": "استخدم Codex داخل Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "ضع نجمة على GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "نزّل تطبيق سطح المكتب", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["بدأ OpenAI Codex مولّدًا للشيفرة، لكنه صار في 2026 أداة موثوقة لتصميم واجهات حقيقية — بمجرد أن تزوّده بالمراجع والـ skills وحلقة التحقق الصحيحة. هذا دليل عملي وشامل لاستخدام Codex في عمل الواجهات والواجهة الأمامية وأنظمة التصميم، ولربطه بسير عمل تصميمي منظّم عبر Open Design.", "يغطّي ما هو Codex اليوم، ولماذا صار فجأةً جيدًا في الواجهة الأمامية، وكيف تعدّه من الصفر، وحلقة من-لقطة-الشاشة-إلى-الواجهة، والتكامل الرسمي ثنائي الاتجاه مع Figma، وكيف يقارَن بـ Cursor وClaude Code، والمزالق التي تجعل مخرجات الذكاء الاصطناعي تبدو عامة، وكيف يسدّ Open Design الفجوة بصفته طبقة تصميم مفتوحة ومحلية أولًا."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "حلقة تغذية راجعة لتصميم Codex: وكيل طرفي، ومتصفح يعرض الواجهة، ومساحة عمل، مع سهم تغذية راجعة يعود إلى البداية", "caption": "الحلقة الأساسية: يبني Codex الواجهة في الطرفية، ويعرضها ويتحقق منها في متصفح حقيقي، ويكرّر مقابل مراجعك."}, "tocLabel": "في هذه الصفحة", "toc": [{"id": "what-is-codex", "label": "ما هو OpenAI Codex فعلًا"}, {"id": "why-design", "label": "لماذا صار Codex جيدًا في التصميم الآن"}, {"id": "setup", "label": "إعداد Codex للتصميم (من الصفر)"}, {"id": "screenshot-workflow", "label": "سير عمل من لقطة الشاشة إلى الواجهة"}, {"id": "figma", "label": "التكامل ثنائي الاتجاه بين Codex وFigma"}, {"id": "vs", "label": "‏Codex مقابل Cursor مقابل Claude Code"}, {"id": "pitfalls", "label": "المزالق ومظهر «فوضى الذكاء الاصطناعي»"}, {"id": "open-design", "label": "التصميم بـ Codex داخل Open Design"}, {"id": "faq", "label": "الأسئلة الشائعة"}], "sections": [{"id": "what-is-codex", "heading": "ما هو OpenAI Codex فعلًا (وما ليس هو)", "blocks": [{"kind": "p", "text": "أولًا، توضيح يُربك كل من يبحث عن «Codex» تقريبًا. كان OpenAI Codex الأصلي نموذج إكمال شيفرة من 2021 شغّل النسخ المبكرة من GitHub Copilot وأُوقِف في 2023. ليس هذا موضوع الصفحة. أما Codex اليوم فهو أداة البرمجة الوكيلة من OpenAI — يخطّط ويكتب ويشغّل ويتحقق من الشيفرة انطلاقًا من مهام باللغة الطبيعية."}, {"kind": "p", "text": "يأتي Codex الحديث عبر أربع واجهات: واجهة سطر أوامر طرفية (أُعيدت كتابتها بـ Rust، برخصة Apache-2.0)، وإضافة لبيئات التطوير VS Code وCursor وWindsurf، وتجربة سحابية/ويب للمهام غير المتزامنة المفوّضة، وتطبيق سطح مكتب بمتصفح داخلي وميزة Computer Use."}, {"kind": "steps", "items": [{"label": "النموذج الافتراضي", "body": "اعتبارًا من منتصف 2026، النموذج المُوصى به هو gpt-5.5، مع كون gpt-5.4 النموذج الذي درّبته OpenAI صراحةً للواجهة الأمامية واستخدام الحاسوب."}, {"label": "ملف التعليمات", "body": "يقرأ Codex ملف AGENTS.md في مشروعك (معيار متعدد الأدوات) لقواعد المشروع — المكان الطبيعي لترميز أعراف التصميم لديك."}, {"label": "البيئة المعزولة", "body": "يعمل في بيئة معزولة على مستوى النواة (وضع الكتابة في مساحة العمل افتراضيًا)، فلا يستطيع وكيل يحرّر واجهتك أن يتجوّل خارج المشروع."}]}, {"kind": "ul", "items": ["المزوِّد: OpenAI", "بيانات الاعتماد: مفتاح OpenAI API (مبدأ BYOK) أو اشتراك ChatGPT (Free / Go / Plus / Pro / Business / Enterprise)", "رخصة واجهة سطر الأوامر: Apache-2.0، مفتوحة المصدر"]}]}, {"id": "why-design", "heading": "لماذا صار Codex جيدًا في التصميم الآن", "blocks": [{"kind": "p", "text": "تقاطعت ثلاثة أمور في أوائل 2026 لتجعل Codex أداة تصميم حقيقية لا مجرد مولّد شيفرة عام."}, {"kind": "steps", "items": [{"label": "نموذج مدرَّب للواجهة الأمامية", "body": "أطلقت OpenAI النموذج GPT-5.4، أول نموذج رئيسي لها مدرَّب للواجهة الأمامية واستخدام الحاسوب، بفهم أفضل بكثير للصور عبر سير عمل التصميم وتحقّق ذاتي أقوى. بل يمكنه توليد لوحات مزاج وخيارات بصرية قبل الالتزام بالأصول النهائية."}, {"label": "skill رسمي للواجهة الأمامية", "body": "يقدّم كتالوج openai/skills مهارة frontend منسّقة تفرض ذوقًا حقيقيًا: تخطيطات بلا بطاقات، أبطال ممتدة الحواف، هرمية تقدّم العلامة، حركة مقيّدة، خطّان كحد أقصى ولون توكيد واحد — وتجعل Codex يكتب أطروحة بصرية قبل البناء."}, {"label": "التحقق في المتصفح", "body": "مع مهارة Playwright يفتح Codex متصفحًا حقيقيًا، ويغيّر الحجم إلى نقاط التوقف، ويقارن مخرجاته بالمرجع بدلًا من مجرد التحقق من نجاح البناء."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "رسم تخطيطي يوضّح تقارب نظام التصميم والـ skill والصورة المرجعية نحو مخرجات تصميم جيدة", "caption": "ينبع الذوق من ثلاثة مدخلات تقدّمها أنت: نظام تصميم، وskill، وصور مرجعية حقيقية."}, {"kind": "p", "text": "الدرس وراء الثلاثة جميعًا: لا يملك Codex ذوقًا افتراضيًا. إنه ينتج تصميمًا جيدًا حين تمنحه قيودًا — نظام تصميم، وskill جمالي، ومراجع ملموسة. ويجمع Open Design تلك المدخلات بالضبط، ولهذا يتلاءم الاثنان معًا (المزيد أدناه)."}]}, {"id": "setup", "heading": "إعداد Codex لعمل التصميم، من الصفر", "blocks": [{"kind": "p", "text": "هذا هو المسار الكامل من جهاز نظيف إلى Codex قادر على بناء الواجهة والتحقق منها."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "سير إعداد من خمس خطوات: التثبيت، المصادقة، التهيئة، تثبيت الـ skill، التحقق", "caption": "تسلسل الإعداد: التثبيت ← المصادقة ← تهيئة AGENTS.md ← تثبيت frontend skill ← تفعيل التحقق في المتصفح."}, {"kind": "steps", "items": [{"label": "رمّز قواعد التصميم لديك", "body": "ضع tokens وعناصرك الأولية وأعرافك في AGENTS.md أو في DESIGN.md ووجّه Codex إليها، كي تطابق المخرجات هوية علامة بدلًا من العودة إلى مظهر عام."}, {"label": "اختر مستوى الاستدلال الصحيح", "body": "تشير OpenAI إلى أن مستويات الاستدلال المنخفضة إلى المتوسطة كثيرًا ما تنتج نتائج واجهة أمامية أقوى من الإعداد الأعلى."}]}]}, {"id": "screenshot-workflow", "heading": "سير عمل من لقطة الشاشة إلى الواجهة", "blocks": [{"kind": "p", "text": "أعلى حلقات التصميم رافعةً مع Codex هي تحويل صورة مرجعية إلى واجهة عاملة ومتجاوبة والتكرار حتى تطابق. وتتلخّص إرشادات OpenAI نفسها في خمس خطوات."}, {"kind": "ol", "items": ["ابدأ من أوضح المراجع البصرية لديك — وضمّن حالات متعددة (سطح المكتب والجوال، التحويم، الفارغ، التحميل)، لا لقطة بطل واحدة فقط.", "كن محددًا في المطالبة؛ فالمطالبات الغامضة تنتج واجهة عامة.", "جهّز نظام تصميم وأخبر Codex بمكان الـ tokens والعناصر الأولية المرجعية.", "فعّل مهارة Playwright التفاعلية كي يعرض Codex في متصفح حقيقي ويغيّر الحجم إلى نقاط التوقف.", "كرّر بجعل Codex يقارن تنفيذه بلقطات الشاشة — لا أن يكتفي بتأكيد البناء."]}, {"kind": "p", "text": "غذِّ الصور بسحب لقطة شاشة إلى الطرفية أو عبر علامة الصورة، ثم أرسِل مطالبة بقيود ملموسة:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "شغّل خادم تطوير في طرفية ثانية، وأبقِ المطالبات صغيرة ومركّزة، وثبّت التكرارات الجيدة / وأرجِع السيئة (مع إخبار Codex حين تُرجِع) كي تبني كل تمريرة على قاعدة نظيفة."}]}, {"id": "figma", "heading": "‏Codex + Figma: تكامل ثنائي الاتجاه بين التصميم والشيفرة", "blocks": [{"kind": "p", "text": "في فبراير 2026 أعلنت OpenAI وFigma شراكة رسمية، حوّلت نسخة Figma MCP التجريبية السابقة إلى تكامل متقدّم ثنائي الاتجاه. وهو يعمل في الاتجاهين."}, {"kind": "steps", "items": [{"label": "التصميم ← الشيفرة", "body": "انسخ «link to selection» لإطار في Figma، والصقه في Codex مع get_design_context، واطلب منه تنفيذ التصميم باستخدام مكتبة مكوّناتك الموجودة."}, {"label": "الشيفرة ← التصميم", "body": "تحوّل أداة generate_figma_design («Code to Canvas») واجهةً حيّة قيد التشغيل عائدةً إلى إطارات Figma قابلة للتحرير — الشاشة كاملةً، أو عنصرًا محددًا، أو ملفًا كاملًا."}]}, {"kind": "p", "text": "يعمل Figma MCP بصفته خادمًا بعيدًا ومُعفى من حدود المعدل. أضِفه مرة واحدة فيصبح متاحًا لـ Codex وClaude Code وCursor وVS Code والمزيد — وهو تمامًا نوع القدرة المحمولة متعددة الوكلاء التي بُني Open Design لتنسيقها."}]}, {"id": "vs", "heading": "‏Codex مقابل Cursor مقابل Claude Code للتصميم", "blocks": [{"kind": "p", "text": "لا يوجد فائز واحد في عمل التصميم — فلكل وكيل قوة مختلفة، والفرق المتمرّسة تجمع بينها. وإليك خلاصة منصفة:"}, {"kind": "table", "columns": ["الوكيل", "قوة التصميم", "الأنسب لـ"], "rows": [["Codex", "صقل بصري قوي بعد GPT-5.4 + frontend-skill؛ فهم للصور", "عمليات البناء غير المتزامنة المفوّضة، التشغيل المعزول، قواعد AGENTS.md المحمولة"], ["Cursor", "حلقة بناء-ومشاهدة بصرية مع معاينة حيّة وتحريرات مضمّنة", "عمل واجهة محكم بالتكرار-والمراقبة داخل بيئة تطوير"], ["Claude Code", "قرارات تصميم محددة (hex، مسافات، خطوط) وتجربة مستخدم واعية بقاعدة الشيفرة", "تفكير الواجهة الأمامية وإعادة الهيكلة بسياق واسع"]]}, {"kind": "p", "text": "الحكم المتكرر في المجتمع أن الذوق يأتي من البشر: فجميعها تتجه افتراضيًا إلى مظهر عام دون skills ومراجع وقيود. تلك هي المشكلة الحقيقية التي ينبغي حلّها — وهي بشكل أداة تصميم، لا بشكل نموذج."}]}, {"id": "pitfalls", "heading": "المزالق، وكيف تتجنّب مظهر «فوضى الذكاء الاصطناعي»", "blocks": [{"kind": "p", "text": "أكثر شكوى شيوعًا عن التصميم المولَّد بـ Codex أنه يبدو عامًا — تدرّجات ناعمة، لوحات عائمة، زوايا دائرية مفرطة الحجم، ظلال دراميّة، أجواء Inter-والبنفسجي «تصرخ بأن ذكاءً اصطناعيًا صنع هذا.» وتشمل المشكلات الأخرى المبلَّغ عنها انكسار تخطيطات الجوال، وتسرّب التعليمات إلى نصوص الواجهة، وبلوغ حدود الاستخدام بسرعة."}, {"kind": "steps", "items": [{"label": "ثبّت frontend skill", "body": "skill جمالي منسّق يجبر Codex على الالتزام باتجاه حقيقي بدلًا من المظهر الافتراضي."}, {"label": "فعّل تحقق Playwright", "body": "اجعل Codex يعرض ويتحقق ذاتيًا عبر نقاط التوقف كي لا تنكسر التخطيطات بصمت على الجوال."}, {"label": "زوّده بالـ tokens والمراجع", "body": "tokens التصميم الحقيقية ولقطات الشاشة المرجعية هي أكبر رافعة منفردة على جودة المخرجات."}, {"label": "رمّز القواعد في AGENTS.md", "body": "ضع قواعد بأسلوب «لا بطاقات بطل، خطّان كحد أقصى، هرمية تقدّم العلامة» حيث يقرؤها الوكيل في كل تشغيل."}]}, {"kind": "p", "text": "لاحظ أن كل إجراء تخفيف يتمحور حول منح الوكيل سياق تصميم منسّقًا. والحفاظ على ذلك السياق يدويًا، لكل مشروع، هو الكدّ الذي يزيله Open Design."}]}, {"id": "open-design", "heading": "التصميم بـ Codex داخل Open Design", "blocks": [{"kind": "p", "text": "‏Open Design هو طبقة التصميم مفتوحة المصدر التي يطلبها سير العمل أعلاه باستمرار. يعامل Codex بصفته محوّلًا أصيلًا ويغلّفه بمكتبة منسّقة من الـ skills وأنظمة التصميم، وخط معالجة عرض منظّم، وواجهة سطح مكتب محلية — كي يكون سياق التصميم الذي يجعل Codex جيدًا حاضرًا من أول تشغيل، لا مُجمَّعًا يدويًا في كل مرة."}, {"kind": "ol", "items": ["ثبّت Open Design واختر Codex وكيلًا لك.", "صادِق بمفتاح OpenAI API (مبدأ BYOK) أو اشتراك ChatGPT — تبقى بيانات الاعتماد على جهازك ولا تُمرَّر عبرنا أبدًا.", "اختر نظام تصميم وskill، ثم ولّد العروض والنماذج الأولية وصفحات الهبوط بذوق متّسق.", "كل أثر وكل ملف DESIGN.md يعيش في مستودعك الخاص، لا في سحابة مستضافة."]}, {"kind": "p", "text": "وكيل Codex نفسه، المفتاح نفسه — إضافةً إلى سير عمل تصميمي حقيقي ومحمول ومفتوح المصدر يحيط به. إنه محلي أولًا وبرخصة Apache-2.0، فلا شيء عن عملك أو بيانات اعتمادك يغادر جهازك."}]}], "faqTitle": "الأسئلة الشائعة", "faq": [{"name": "هل يستطيع OpenAI Codex فعلًا أداء عمل التصميم؟", "text": "نعم — مع frontend skill ونظام تصميم وصور مرجعية حقيقية في السياق، ينتج Codex (وخاصةً على GPT-5.4) واجهة بجودة إنتاجية ومتجاوبة ويمكنه التحقق منها في متصفح. وبدون ذلك السياق يميل إلى مظهر عام، وهي الفجوة التي يسدّها Open Design."}, {"name": "هل هذه إضافة OpenAI Codex Product Design؟", "text": "لا. Open Design مشروع مستقل مفتوح المصدر يدمج Codex بصفته وكيلًا. وهو يكمّل أدوات OpenAI الخاصة بمكتبة skills وأنظمة تصميم مفتوحة ومحلية أولًا."}, {"name": "هل أحتاج إلى اشتراك ChatGPT للتصميم بـ Codex؟", "text": "يمكنك استخدام مفتاح OpenAI API (مبدأ BYOK) أو اشتراك ChatGPT الخاص بك. وعادةً ما يمنح تسجيل الدخول عبر ChatGPT حدودًا أكثر سخاءً؛ ولا يمرّر Open Design بيانات اعتمادك في كلتا الحالتين."}, {"name": "‏Codex أم Claude Code لتصميم الواجهة الأمامية؟", "text": "كلاهما قوي. يُعرَف Claude Code بقرارات تصميم محددة وواعية بقاعدة الشيفرة؛ ويتمتع Codex بصقل بصري قوي بعد GPT-5.4 ويتفوّق في عمليات البناء المفوّضة المعزولة. وتستخدم فرق كثيرة كليهما — ويتيح لك Open Design تبديل الوكلاء دون تغيير سير عمل التصميم."}, {"name": "كيف أصل Codex بـ Figma؟", "text": "أضِف خادم Figma MCP الرسمي (codex mcp add figma --url https://mcp.figma.com/mcp). عندها يمكنك تنفيذ إطارات Figma في شيفرة عبر get_design_context، ودفع واجهة قيد التشغيل عائدةً إلى إطارات Figma قابلة للتحرير عبر generate_figma_design."}, {"name": "كيف أتجنّب جماليّة «فوضى الذكاء الاصطناعي» العامة؟", "text": "ثبّت frontend skill، وزوّده بـ tokens تصميم حقيقية ولقطات شاشة مرجعية، ورمّز قواعد العلامة في AGENTS.md، وفعّل تحقق Playwright. ويقدّم Open Design هذه بصفتها مكتبة منسّقة كي تتخطّى الإعداد لكل مشروع."}, {"name": "هل Open Design تابع لـ OpenAI؟", "text": "لا. Codex منتج من OpenAI؛ وOpen Design مشروع مستقل مفتوح المصدر يدعمه بصفته محوّلًا أصيلًا. وOpenAI وCodex علامتان تجاريتان لـ OpenAI."}, {"name": "هل ملفاتي وبيانات اعتمادي آمنة؟", "text": "نعم — Open Design محلي أولًا. تبقى ملفاتك وآثارك وملف DESIGN.md في مستودعك الخاص، وتُستخدَم بيانات اعتماد OpenAI مباشرةً بواسطة وكيلك، ولا تُمرَّر عبر خوادم Open Design أبدًا."}], "ctaTitle": "صمّم بـ Codex، بالطريقة المفتوحة.", "ctaBody": "أحضر مفتاح OpenAI الخاص بك، واحتفظ بكل ملف محليًا، واحصل على مكتبة تصميم منسّقة حول الوكيل الذي تستخدمه أصلًا.", "ctaActions": [{"label": "استخدم Codex داخل Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "ضع نجمة على GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "نزّل تطبيق سطح المكتب", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "اعرض كل الوكلاء المدعومين"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor للمصممين — Open Design", + description: "كيف يستخدم المصممون Cursor في تصميم الواجهات والويب — وضع التصميم، Figma إلى شيفرة، Figma MCP — وكيف يحوّله Open Design إلى وكيل تصميم محلي أولًا ومفتوح المصدر.", + breadcrumb: "Cursor", + label: "وكيل · Cursor", + heading: "Cursor للمصممين.", + lead: "‏Cursor هو محرّر الشيفرة بالذكاء الاصطناعي، ومعه الآن وضع تصميم بصري. يستخدمه المصممون لتحرير الواجهة بالإشارة والرسم، ولتحويل Figma إلى شيفرة. يربط Open Design وكيل Cursor بسير عمل تصميمي مفتوح المصدر يبقي ملفاتك محلية.", + rich: {"heroCtaLead": "يحوّل Open Design الأداة Cursor إلى وكيل تصميم محلي أولًا ومفتوح المصدر — حساب Cursor أو مفاتيح النماذج الخاصة بك، وملفاتك، ومكتبة منسّقة من الـ skills وأنظمة التصميم تحيط بها.", "heroCtaActions": [{"label": "استخدم Cursor داخل Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "ضع نجمة على GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "نزّل تطبيق سطح المكتب", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["‏Cursor هو محرّر الشيفرة الذي يضع الذكاء الاصطناعي أولًا، والذي جعل «ابنِه وشاهده يُعرَض» الطريقة الافتراضية لشحن الواجهات. مع وضع الوكيل والتحريرات المضمّنة والمعاينة داخل المحرّر وFigma عبر MCP، صار أداة تصميم حقيقية — بمجرد أن تزوّده بالمراجع والقواعد الصحيحة وحلقة تحقق. هذا دليل عملي وشامل لاستخدام Cursor في عمل الواجهات والواجهة الأمامية وأنظمة التصميم، ولربطه بسير عمل تصميمي منظّم عبر Open Design.", "يغطّي ما هو Cursor فعلًا، ولماذا تُجيد حلقته المحكمة بالتكرار-والمراقبة التصميم، وكيف تعدّه من الصفر، وحلقة من-لقطة-الشاشة-والمعاينة-إلى-الواجهة، والتكامل ثنائي الاتجاه مع Figma عبر MCP، وكيف يقارَن بـ Codex وClaude Code، والمزالق التي تجعل مخرجات الذكاء الاصطناعي تبدو عامة، وكيف يسدّ Open Design الفجوة بصفته طبقة تصميم مفتوحة ومحلية أولًا."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "تقارب تصميم Cursor: محرّر على اليسار، ومركز منسّق من الـ skills وأنظمة التصميم في الوسط مع شعار Cursor في المنتصف، وواجهة معروضة على اليمين", "caption": "الفكرة الأساسية: يحرّر Cursor الواجهة ويعرضها في المحرّر، بينما يغذّيه مركز تصميم منسّق بالنظام والـ skills والمراجع التي تجعل المخرجات تبدو مقصودة."}, "tocLabel": "في هذه الصفحة", "toc": [{"id": "what-is-cursor", "label": "ما هو Cursor فعلًا"}, {"id": "why-design", "label": "لماذا يجيد Cursor التصميم"}, {"id": "setup", "label": "إعداد Cursor للتصميم (من الصفر)"}, {"id": "preview-workflow", "label": "سير عمل من المعاينة إلى الواجهة"}, {"id": "figma", "label": "‏Cursor + Figma عبر MCP"}, {"id": "vs", "label": "‏Cursor مقابل Codex مقابل Claude Code"}, {"id": "pitfalls", "label": "المزالق ومظهر «فوضى الذكاء الاصطناعي»"}, {"id": "open-design", "label": "التصميم بـ Cursor داخل Open Design"}, {"id": "faq", "label": "الأسئلة الشائعة"}], "sections": [{"id": "what-is-cursor", "heading": "ما هو Cursor فعلًا", "blocks": [{"kind": "p", "text": "‏Cursor هو محرّر شيفرة يضع الذكاء الاصطناعي أولًا، بناه Anysphere. وهو نسخة معدّلة من VS Code، فيحتفظ بالمحرّر والإضافات واختصارات المفاتيح المألوفة، لكنه يعيد بناء سير العمل حول وكيل ذكاء اصطناعي يقرأ مشروعك كاملًا، ويحرّر ملفات متعددة، ويشغّل الأوامر، ويكرّر معك ضمن الحلقة."}, {"kind": "p", "text": "في عمل التصميم، الواجهات المهمة هي وضع الوكيل (تصف نتيجة فيخطّط Cursor ويحرّر عبر الملفات)، والتحريرات المضمّنة وإكمالات Tab للتعديلات السريعة، ومعاينة/متصفح داخل المحرّر يتيحان رؤية الواجهة قيد التشغيل دون مغادرة النافذة، ودعم MCP الذي يسمح له بجلب سياق خارجي كملف Figma حيّ."}, {"kind": "steps", "items": [{"label": "قواعد المشروع", "body": "يقرأ Cursor ملفات تعليمات المشروع — قواعد `.mdc` المُدارة بإصدارات تحت `.cursor/rules`، وملف `AGENTS.md` بسيط — كي ترمّز أعراف التصميم لديك حيث يقرؤها الوكيل في كل تشغيل."}, {"label": "النماذج", "body": "‏Cursor مرن في النماذج: يأتي بنماذج متقدّمة عبر اشتراكك ويدعم أيضًا إحضار مفاتيح نماذجك الخاصة، فتختار المحرّك خلف سير عمل المحرّر نفسه."}, {"label": "MCP", "body": "يتحدّث بروتوكول Model Context Protocol، فتصبح الخوادم الخارجية — وأبرزها خادم Figma MCP — سياقًا أصيلًا للوكيل."}]}, {"kind": "ul", "items": ["المزوِّد: Anysphere", "بيانات الاعتماد: حساب / اشتراك Cursor (Hobby / Pro / Business) أو مفاتيح نماذجك الخاصة (مبدأ BYOK)", "الصيغة: محرّر شيفرة يضع الذكاء الاصطناعي أولًا (نسخة معدّلة من VS Code) مع وكيل ومعاينة داخل المحرّر"]}]}, {"id": "why-design", "heading": "لماذا يجيد Cursor التصميم", "blocks": [{"kind": "p", "text": "ميزة Cursor في التصميم ليست ميزة واحدة — بل إحكام حلقة البناء-والمشاهدة. ثلاثة أمور تجعله يبدو أداة تصميم لا مجرد مولّد شيفرة عام."}, {"kind": "steps", "items": [{"label": "حلقة محكمة بالتكرار-والمراقبة", "body": "تطالب فيحرّر Cursor عبر الملفات، وتعرض المعاينة داخل المحرّر النتيجة فورًا — فتضبط المسافات والهرمية والحركة في ثوانٍ بدلًا من التنقّل عبر طرفية ومتصفح منفصلين."}, {"label": "تحرير بصري مباشر", "body": "إلى جانب المحادثة، يتيح لك Cursor تحديد عناصر في المعاينة وتعديل الأنماط، فتبدو التصحيحات البصرية الصغيرة كتحريرات تصميم لا كتنقيب في الشيفرة."}, {"label": "قواعد المشروع وسياق MCP", "body": "مع `.cursor/rules` (أو `AGENTS.md`) وخادم Figma MCP، يعمل الوكيل مقابل tokens ومكوّناتك ومواصفات التصميم الحقيقية بدلًا من التخمين."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "رسم تخطيطي يوضّح تقارب نظام التصميم والـ skill والصورة المرجعية نحو مخرجات تصميم جيدة", "caption": "ينبع الذوق من ثلاثة مدخلات تقدّمها أنت: نظام تصميم، وskill، وصور مرجعية حقيقية."}, {"kind": "p", "text": "الدرس نفسه الذي يعلّمه كل وكيل: لا يملك Cursor ذوقًا افتراضيًا. إنه ينتج تصميمًا جيدًا حين تمنحه قيودًا — نظام تصميم، وskill جمالي، ومراجع ملموسة. ويجمع Open Design تلك المدخلات بالضبط، ولهذا يتلاءم الاثنان معًا (المزيد أدناه)."}]}, {"id": "setup", "heading": "إعداد Cursor لعمل التصميم، من الصفر", "blocks": [{"kind": "p", "text": "هذا هو المسار الكامل من جهاز نظيف إلى Cursor قادر على بناء الواجهة ومعاينتها والتحقق منها مقابل نظام تصميمك."}, {"kind": "ol", "items": ["ثبّت Cursor من cursor.com وسجّل الدخول بحساب Cursor، أو هيّئ مفاتيح نماذجك الخاصة (مبدأ BYOK) في الإعدادات.", "افتح مشروعك واختر نموذجًا في لوحة المحادثة / الوكيل.", "أضف قواعد المشروع: أنشئ `.cursor/rules/*.mdc` لأعراف منظّمة محدّدة النطاق بالأنماط، أو ملف `AGENTS.md` بسيط لتعليمات بسيطة وقابلة للقراءة.", "اربط خادم Figma MCP (اختياري) كي يقرأ الوكيل سياق التصميم الحيّ.", "شغّل خادم التطوير واستخدم المعاينة داخل المحرّر لرؤية الواجهة والتحقق منها أثناء التكرار."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "سير إعداد من خمس خطوات: التثبيت، المصادقة، تهيئة القواعد، إضافة الـ skill، التحقق", "caption": "تسلسل الإعداد: التثبيت ← المصادقة ← تهيئة قواعد المشروع ← إضافة skill ← تفعيل التحقق بالمعاينة."}, {"kind": "p", "text": "ملف قواعد مشروع بسيط يجعل الوكيل يصمّم لهوية علامة بدلًا من العودة إلى مظهر عام. ضعه حيث يقرؤه Cursor في كل تشغيل:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "رمّز قواعد التصميم لديك", "body": "ضع tokens وعناصرك الأولية وأعرافك في `.cursor/rules` أو `AGENTS.md` ووجّه Cursor إليها، كي تطابق المخرجات هوية علامة بدلًا من العودة إلى مظهر عام."}, {"label": "أبقِ المطالبات صغيرة", "body": "حلقة Cursor المحكمة تكافئ الطلبات المركّزة — كرّر مكوّنًا أو حالة واحدة في كل مرة وراقب المعاينة بين التمريرات."}]}]}, {"id": "preview-workflow", "heading": "سير عمل من المعاينة إلى الواجهة", "blocks": [{"kind": "p", "text": "أعلى حلقات التصميم رافعةً مع Cursor هي تحويل مرجع إلى واجهة عاملة ومتجاوبة والتكرار في المحرّر حتى تطابق — مع مراقبة المعاينة الحيّة طوال الوقت بدلًا من التخمين."}, {"kind": "ol", "items": ["ابدأ من أوضح المراجع البصرية لديك — وضمّن حالات متعددة (سطح المكتب والجوال، التحويم، الفارغ، التحميل)، لا لقطة بطل واحدة فقط.", "كن محددًا في المطالبة؛ فالمطالبات الغامضة تنتج واجهة عامة.", "جهّز نظام تصميم وأخبر Cursor بمكان الـ tokens والعناصر الأولية المرجعية.", "أبقِ المعاينة داخل المحرّر مفتوحة وخادم التطوير يعمل كي تُعرَض كل تحريرة فورًا عند نقاط التوقف التي تهمّك.", "كرّر بمقارنة الواجهة المعروضة بالمراجع — واستخدم تحديد العناصر المباشر في المعاينة للتصحيحات البصرية الصغيرة."]}, {"kind": "p", "text": "غذِّ المراجع بإرفاق صورة بالمحادثة، ثم أرسِل مطالبة بقيود ملموسة:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "ثبّت التكرارات الجيدة وأرجِع السيئة (مع إخبار Cursor حين تُرجِع) كي تبني كل تمريرة على قاعدة نظيفة — الانضباط نفسه الذي يمنع أي حلقة وكيل من الانحراف."}]}, {"id": "figma", "heading": "‏Cursor + Figma: التصميم ↔ الشيفرة عبر MCP", "blocks": [{"kind": "p", "text": "يتصل Cursor بـ Figma عبر خادم Figma MCP الرسمي، الذي يمنح الوكيل وصولًا منظّمًا إلى ملف Figma حيّ بدلًا من لقطة شاشة مسطّحة. وهذا يزيل التخمين من التسليم."}, {"kind": "steps", "items": [{"label": "التصميم ← الشيفرة", "body": "انسخ رابط إطار في Figma، والصقه في Cursor، واطلب منه تنفيذ التصميم. يعرض خادم MCP سياق التصميم الحقيقي — مكوّنات، متغيرات، بيانات تخطيط، tokens — كي تطابق الشيفرة المولَّدة المصدر بدلًا من مقاربته."}, {"label": "ابقَ متوائمًا", "body": "مع استخدام tokens التصميم والأنماط والمكوّنات باتّساق في Figma (وCode Connect حيث يتوفّر)، تبقى مخرجات Cursor مرتبطة بنظام تصميمك الحقيقي بدلًا من إعادة ابتكار العناصر الأولية."}]}, {"kind": "p", "text": "أعدّ خادم Figma MCP البعيد مرة واحدة فيصبح متاحًا لـ Cursor بصفته سياقًا أصيلًا. ولأن MCP معيار مفتوح، فإن الخادم نفسه قابل لإعادة الاستخدام عبر Cursor وClaude Code وCodex وVS Code — وهو تمامًا نوع القدرة المحمولة متعددة الوكلاء التي بُني Open Design لتنسيقها."}]}, {"id": "vs", "heading": "‏Cursor مقابل Codex مقابل Claude Code للتصميم", "blocks": [{"kind": "p", "text": "لا يوجد فائز واحد في عمل التصميم — فلكل وكيل قوة مختلفة، والفرق المتمرّسة تجمع بينها. وإليك خلاصة منصفة:"}, {"kind": "table", "columns": ["الوكيل", "قوة التصميم", "الأنسب لـ"], "rows": [["Cursor", "حلقة بناء-ومشاهدة بصرية مع معاينة حيّة داخل المحرّر وتحرير مباشر للعناصر", "عمل واجهة محكم بالتكرار-والمراقبة داخل بيئة تطوير"], ["Codex", "صقل بصري قوي مع frontend skill؛ فهم للصور وتشغيل معزول", "عمليات البناء غير المتزامنة المفوّضة وقواعد AGENTS.md المحمولة"], ["Claude Code", "قرارات تصميم محددة (hex، مسافات، خطوط) وتجربة مستخدم واعية بقاعدة الشيفرة", "تفكير الواجهة الأمامية وإعادة الهيكلة بسياق واسع"]]}, {"kind": "p", "text": "الحكم المتكرر في المجتمع أن الذوق يأتي من البشر: فجميعها تتجه افتراضيًا إلى مظهر عام دون skills ومراجع وقيود. تلك هي المشكلة الحقيقية التي ينبغي حلّها — وهي بشكل أداة تصميم، لا بشكل نموذج."}]}, {"id": "pitfalls", "heading": "المزالق، وكيف تتجنّب مظهر «فوضى الذكاء الاصطناعي»", "blocks": [{"kind": "p", "text": "أكثر شكوى شيوعًا عن التصميم المولَّد بـ Cursor أنه يبدو عامًا — تدرّجات ناعمة، لوحات عائمة، زوايا دائرية مفرطة الحجم، ظلال دراميّة، أجواء Inter-والبنفسجي «تصرخ بأن ذكاءً اصطناعيًا صنع هذا.» وتشمل المشكلات الأخرى المبلَّغ عنها تخطيطات تنكسر على الجوال وتسرّب التعليمات إلى نصوص الواجهة."}, {"kind": "steps", "items": [{"label": "أضف skill تصميم", "body": "skill جمالي منسّق يجبر Cursor على الالتزام باتجاه حقيقي بدلًا من المظهر الافتراضي."}, {"label": "استخدم المعاينة للتحقق", "body": "اعرض وتحقق ذاتيًا عبر نقاط التوقف في المعاينة داخل المحرّر كي لا تنكسر التخطيطات بصمت على الجوال."}, {"label": "زوّده بالـ tokens والمراجع", "body": "tokens التصميم الحقيقية ولقطات الشاشة المرجعية هي أكبر رافعة منفردة على جودة المخرجات."}, {"label": "رمّز القواعد في `.cursor/rules`", "body": "ضع قواعد بأسلوب «لا بطاقات بطل، خطّان كحد أقصى، هرمية تقدّم العلامة» حيث يقرؤها الوكيل في كل تشغيل."}]}, {"kind": "p", "text": "لاحظ أن كل إجراء تخفيف يتمحور حول منح الوكيل سياق تصميم منسّقًا. والحفاظ على ذلك السياق يدويًا، لكل مشروع، هو الكدّ الذي يزيله Open Design."}]}, {"id": "open-design", "heading": "التصميم بـ Cursor داخل Open Design", "blocks": [{"kind": "p", "text": "‏Open Design هو طبقة التصميم مفتوحة المصدر التي يطلبها سير العمل أعلاه باستمرار. يعامل Cursor بصفته محوّلًا أصيلًا ويغلّفه بمكتبة منسّقة من الـ skills وأنظمة التصميم، وخط معالجة عرض منظّم، وواجهة سطح مكتب محلية — كي يكون سياق التصميم الذي يجعل Cursor جيدًا حاضرًا من أول تشغيل، لا مُجمَّعًا يدويًا في كل مرة."}, {"kind": "ol", "items": ["ثبّت Open Design واختر Cursor وكيلًا لك.", "صادِق بحساب Cursor أو مفاتيح نماذجك الخاصة (مبدأ BYOK) — تبقى بيانات الاعتماد على جهازك ولا تُمرَّر عبرنا أبدًا.", "اختر نظام تصميم وskill، ثم ولّد العروض والنماذج الأولية وصفحات الهبوط بذوق متّسق.", "كل أثر وكل ملف DESIGN.md يعيش في مستودعك الخاص، لا في سحابة مستضافة."]}, {"kind": "p", "text": "وكيل Cursor نفسه، المفتاح نفسه — إضافةً إلى سير عمل تصميمي حقيقي ومحمول ومفتوح المصدر يحيط به. إنه محلي أولًا وبرخصة Apache-2.0، فلا شيء عن عملك أو بيانات اعتمادك يغادر جهازك."}]}], "faqTitle": "الأسئلة الشائعة", "faq": [{"name": "هل يستطيع Cursor فعلًا أداء عمل التصميم؟", "text": "نعم — مع skill تصميم ونظام تصميم وصور مرجعية حقيقية في السياق، ينتج Cursor واجهة بجودة إنتاجية ومتجاوبة، وتتيح لك المعاينة داخل المحرّر التحقق منها وصقلها بصريًا. وبدون ذلك السياق يميل إلى مظهر عام، وهي الفجوة التي يسدّها Open Design."}, {"name": "هل هذا منتج Cursor رسمي؟", "text": "لا. Open Design مشروع مستقل مفتوح المصدر يدمج Cursor بصفته وكيلًا. وهو يكمّل Cursor بمكتبة skills وأنظمة تصميم مفتوحة ومحلية أولًا."}, {"name": "هل أحتاج إلى اشتراك Cursor للتصميم بـ Cursor؟", "text": "يمكنك استخدام حساب / اشتراك Cursor أو إحضار مفاتيح نماذجك الخاصة (مبدأ BYOK). ولا يمرّر Open Design بيانات اعتمادك في كلتا الحالتين — فهي تُستخدَم مباشرةً بواسطة وكيلك."}, {"name": "‏Cursor أم Claude Code لتصميم الواجهة الأمامية؟", "text": "كلاهما قوي. يُعرَف Claude Code بقرارات تصميم محددة وواعية بقاعدة الشيفرة؛ وميزة Cursor هي حلقته المحكمة بالبناء-والمشاهدة مع معاينة حيّة داخل المحرّر. وتستخدم فرق كثيرة كليهما — ويتيح لك Open Design تبديل الوكلاء دون تغيير سير عمل التصميم."}, {"name": "كيف أصل Cursor بـ Figma؟", "text": "أضِف خادم Figma MCP الرسمي في Cursor، ثم الصق رابط إطار Figma في المحادثة واطلب من Cursor تنفيذه. يعرض الخادم مكوّنات ومتغيرات وبيانات تخطيط حقيقية كي تطابق الشيفرة المولَّدة تصميم المصدر."}, {"name": "كيف أتجنّب جماليّة «فوضى الذكاء الاصطناعي» العامة؟", "text": "أضف skill تصميم، وزوّده بـ tokens تصميم حقيقية ولقطات شاشة مرجعية، ورمّز قواعد العلامة في `.cursor/rules` أو `AGENTS.md`، وتحقق عبر نقاط التوقف في المعاينة. ويقدّم Open Design هذه بصفتها مكتبة منسّقة كي تتخطّى الإعداد لكل مشروع."}, {"name": "هل Open Design تابع لـ Cursor أو Anysphere؟", "text": "لا. Cursor منتج من Anysphere؛ وOpen Design مشروع مستقل مفتوح المصدر يدعمه بصفته محوّلًا أصيلًا. وCursor وAnysphere علامتان تجاريتان لـ Anysphere, Inc."}, {"name": "هل ملفاتي وبيانات اعتمادي آمنة؟", "text": "نعم — Open Design محلي أولًا. تبقى ملفاتك وآثارك وملف DESIGN.md في مستودعك الخاص، وتُستخدَم بيانات اعتماد Cursor أو النموذج مباشرةً بواسطة وكيلك، ولا تُمرَّر عبر خوادم Open Design أبدًا."}], "ctaTitle": "صمّم بـ Cursor، بالطريقة المفتوحة.", "ctaBody": "أحضر حساب Cursor أو مفاتيح النماذج الخاصة بك، واحتفظ بكل ملف محليًا، واحصل على مكتبة تصميم منسّقة حول الوكيل الذي تستخدمه أصلًا.", "ctaActions": [{"label": "استخدم Cursor داخل Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "ضع نجمة على GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "نزّل تطبيق سطح المكتب", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "اعرض كل الوكلاء المدعومين"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode للتصميم — Open Design", + description: "كيف يستخدم الناس OpenCode في تصميم الواجهات والويب — ملفات design.md، skills واجهة المستخدم/تجربة المستخدم، Figma MCP — وكيف يحوّله Open Design إلى وكيل تصميم محلي أولًا ومفتوح المصدر.", + breadcrumb: "OpenCode", + label: "وكيل · OpenCode", + heading: "OpenCode للتصميم.", + lead: "‏OpenCode هو وكيل البرمجة الطرفي بالذكاء الاصطناعي مفتوح المصدر. يركّب عليه المصممون skills تصميم وملفات DESIGN.md لتوليد واجهات حقيقية. يجعل Open Design ذلك سير عمل منظّمًا مفتوح المصدر — أحضر مفاتيح مزوّدك، واحتفظ بكل شيء محليًا.", + rich: {"heroCtaLead": "يحوّل Open Design الأداة OpenCode إلى وكيل تصميم محلي أولًا ومفتوح المصدر — أي نموذج تختاره بمفتاح مزوّدك الخاص، وملفاتك، ومكتبة منسّقة من الـ skills وأنظمة التصميم تحيط بها.", "heroCtaActions": [{"label": "استخدم OpenCode داخل Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "ضع نجمة على GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "نزّل تطبيق سطح المكتب", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["‏OpenCode هو وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر يضع الطرفية أولًا ومحايد للنماذج عمدًا: تُحضر مفتاح مزوّدك الخاص وتشغّل أي نموذج تريده خلف سير العمل نفسه. هذا الانفتاح يجعله قاعدة طبيعية لعمل التصميم — لكنه، كأي وكيل، لا ينتج واجهة جيدة إلا حين تزوّده بالمراجع والـ skills وحلقة تحقق صحيحة. هذا دليل عملي وشامل لاستخدام OpenCode في عمل الواجهات والواجهة الأمامية وأنظمة التصميم، ولربطه بسير عمل تصميمي منظّم عبر Open Design.", "يغطّي ما هو OpenCode فعلًا، ولماذا يلائم وكيل مفتوح محايد للنماذج التصميم، وكيف تعدّه من الصفر، وحلقة من-لقطة-الشاشة-إلى-الواجهة، وكيف يوسّعه AGENTS.md وMCP، وكيف يقارَن بـ Codex وClaude Code وCursor، والمزالق التي تجعل مخرجات الذكاء الاصطناعي تبدو عامة، وكيف يسدّ Open Design الفجوة بصفته طبقة تصميم مفتوحة ومحلية أولًا — وهو اقتران طبيعي، إذ إن كلا المشروعين مفتوحا المصدر ويعملان على جهازك."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "حلقة تغذية راجعة لتصميم OpenCode: وكيل بواجهة طرفية نصية، ومتصفح يعرض الواجهة، ومساحة عمل، مع سهم تغذية راجعة يعود إلى البداية", "caption": "الحلقة الأساسية: يبني OpenCode الواجهة في الطرفية، ويعرضها ويتحقق منها في متصفح حقيقي، ويكرّر مقابل مراجعك — على أي نموذج تختاره."}, "tocLabel": "في هذه الصفحة", "toc": [{"id": "what-is-opencode", "label": "ما هو OpenCode فعلًا"}, {"id": "why-design", "label": "لماذا يلائم وكيل مفتوح متعدد النماذج التصميم"}, {"id": "setup", "label": "إعداد OpenCode للتصميم (من الصفر)"}, {"id": "screenshot-workflow", "label": "سير عمل من لقطة الشاشة إلى الواجهة"}, {"id": "extend", "label": "AGENTS.md وMCP والجلسات القابلة للمشاركة"}, {"id": "vs", "label": "‏OpenCode مقابل Codex مقابل Claude Code مقابل Cursor"}, {"id": "pitfalls", "label": "المزالق ومظهر «فوضى الذكاء الاصطناعي»"}, {"id": "open-design", "label": "التصميم بـ OpenCode داخل Open Design"}, {"id": "faq", "label": "الأسئلة الشائعة"}], "sections": [{"id": "what-is-opencode", "heading": "ما هو OpenCode فعلًا", "blocks": [{"kind": "p", "text": "‏OpenCode هو وكيل برمجة بالذكاء الاصطناعي مفتوح المصدر مبني للطرفية، يصونه الفريق وراء SST (Anomaly Innovations). يقرأ مستودعك، ويشغّل الأوامر، ويحرّر الملفات، ويتحدّث إلى نموذج لغوي كبير — لكنه، بخلاف الوكلاء المرتبطين بمزوّد، لا يأتي بنموذجه الخاص. توجّهه نحو أي مزوّد ونموذج تريده وتُحضر مفتاحك الخاص."}, {"kind": "p", "text": "يعمل بواجهة طرفية نصية (TUI)، مع تطبيق سطح مكتب وإضافات بيئات تطوير فوق المحرك نفسه. وتحت الغطاء يستخدم بنية عميل/خادم، فيكون الوكيل الذي ينجز العمل منفصلًا عن الواجهة التي تقوده منها. ويتبدّل وكيلان مدمجان — build وplan — بمفتاح Tab."}, {"kind": "steps", "items": [{"label": "محايد للنماذج", "body": "تأتي النماذج والمزوّدون من models.dev، وهو كتالوج مفتوح. تهيّئهم في opencode.json بسلسلة provider/model-id ويمكنك تعطيل المزوّدين الذين لا تريد تحميلهم — فيعمل سير عمل التصميم نفسه على Anthropic وOpenAI وGoogle وOpenRouter والنماذج المحلية والمزيد."}, {"label": "ملف التعليمات", "body": "يقرأ OpenCode ملف AGENTS.md في مشروعك (المعيار متعدد الأدوات، المتوافق أيضًا مع CLAUDE.md) لقواعد المشروع — المكان الطبيعي لترميز أعراف التصميم لديك. شغّل /init لتوليد واحد."}, {"label": "قابل للتوسيع", "body": "يدعم تكامل LSP وخوادم MCP والثيمات واختصارات المفاتيح والأوامر المخصّصة، إضافةً إلى روابط جلسات قابلة للمشاركة للتعاون."}]}, {"kind": "ul", "items": ["الصائن: SST / Anomaly Innovations (مشروع مفتوح المصدر)", "بيانات الاعتماد: مفاتيح API الخاصة بمزوّد نماذجك — مبدأ BYOK، بلا ارتباط بمزوّد", "الرخصة: MIT، مفتوحة المصدر"]}]}, {"id": "why-design", "heading": "لماذا يلائم وكيل مفتوح متعدد النماذج عمل التصميم", "blocks": [{"kind": "p", "text": "لا يملك OpenCode «نموذج تصميم» واحدًا كما يملك وكيل مرتبط بمزوّد — وهذا هو المغزى. ولأنه محايد للنماذج ومفتوح، يمكنك تشغيل سير عمل التصميم نفسه على أي نموذج أفضل حاليًا في الواجهة الأمامية، أو تبديله لاحقًا، أو الرجوع إلى نموذج محلي، كل ذلك دون تغيير إعدادك."}, {"kind": "p", "text": "لكن اختيار النموذج وحده لا يشتري ذوقًا. وكأي وكيل برمجة، ينتج OpenCode واجهة عامة ما لم تمنحه قيودًا. ومخرجات التصميم الجيدة تأتي من ثلاثة مدخلات تقدّمها أنت."}, {"kind": "steps", "items": [{"label": "نظام تصميم", "body": "tokens وعناصر أولية وأعراف حقيقية يعيد الوكيل استخدامها، كي تطابق المخرجات هوية علامة بدلًا من العودة إلى مظهر عام."}, {"label": "skill جمالي", "body": "skill منسّق يفرض ذوقًا حقيقيًا — حركة مقيّدة، هرمية تقدّم العلامة، خطّان كحد أقصى ولون توكيد واحد — ويجعل الوكيل يلتزم باتجاه قبل البناء."}, {"label": "مراجع ملموسة", "body": "صور مرجعية فعلية وحالات متعددة (سطح المكتب والجوال، التحويم، الفارغ، التحميل)، لا لقطة بطل واحدة."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "رسم تخطيطي يوضّح تقارب نظام التصميم والـ skill والصورة المرجعية نحو مخرجات تصميم جيدة", "caption": "ينبع الذوق من ثلاثة مدخلات تقدّمها أنت: نظام تصميم، وskill، وصور مرجعية حقيقية — بمعزل عن النموذج الذي تشغّله."}, {"kind": "p", "text": "الدرس: يمنحك OpenCode حرية النماذج، لكن الذوق ما زال يأتي من سياق تصميم منسّق. ويجمع Open Design تلك المدخلات بالضبط، ولهذا يتلاءم الاثنان معًا — كلاهما مفتوح المصدر ومحلي أولًا (المزيد أدناه)."}]}, {"id": "setup", "heading": "إعداد OpenCode لعمل التصميم، من الصفر", "blocks": [{"kind": "p", "text": "هذا هو المسار الكامل من جهاز نظيف إلى OpenCode قادر على بناء الواجهة والتحقق منها."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "سير إعداد من خمس خطوات: التثبيت، المصادقة بمفتاح مزوّدك، تهيئة AGENTS.md، إضافة skill، التحقق", "caption": "تسلسل الإعداد: التثبيت ← المصادقة (مفتاح مزوّدك) ← تهيئة AGENTS.md ← إضافة skill ← التحقق في متصفح حقيقي."}, {"kind": "steps", "items": [{"label": "رمّز قواعد التصميم لديك", "body": "ضع tokens وعناصرك الأولية وأعرافك في AGENTS.md (أو في DESIGN.md مُشار إليه منه) كي تطابق المخرجات هوية علامة بدلًا من العودة إلى مظهر عام. ويمكن لخيار instructions في opencode.json أن يشير إلى ملفات قواعد إضافية عبر الأنماط."}, {"label": "اختر نموذجًا قادرًا", "body": "لأن OpenCode محايد للنماذج، اختر المزوّد/النموذج الأقوى حاليًا في الواجهة الأمامية لتمريرة التصميم — وأبقِ بقية سير عملك دون تغيير."}]}]}, {"id": "screenshot-workflow", "heading": "سير عمل من لقطة الشاشة إلى الواجهة", "blocks": [{"kind": "p", "text": "أعلى حلقات التصميم رافعةً مع أي وكيل هي تحويل صورة مرجعية إلى واجهة عاملة ومتجاوبة والتكرار حتى تطابق. وينطبق الشكل نفسه من خمس خطوات في OpenCode."}, {"kind": "ol", "items": ["ابدأ من أوضح المراجع البصرية لديك — وضمّن حالات متعددة (سطح المكتب والجوال، التحويم، الفارغ، التحميل)، لا لقطة بطل واحدة فقط.", "كن محددًا في المطالبة؛ فالمطالبات الغامضة تنتج واجهة عامة.", "جهّز نظام تصميم وأخبر OpenCode بمكان الـ tokens والعناصر الأولية المرجعية (في AGENTS.md).", "شغّل خادم تطوير واجعل الوكيل يعرض في متصفح حقيقي، مغيّرًا الحجم إلى نقاط التوقف لفحص النتيجة.", "كرّر بجعل OpenCode يقارن تنفيذه بلقطات الشاشة — لا أن يكتفي بتأكيد البناء."]}, {"kind": "p", "text": "أشِر إلى الملفات بـ @ في الواجهة الطرفية لبحث ضبابي في مجلد عملك، وشغّل أوامر الصدفة مضمّنةً ببادئة !، وقُد الإجراءات بأوامر /. ثم أرسِل مطالبة بقيود ملموسة:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "أبقِ المطالبات صغيرة ومركّزة، وثبّت التكرارات الجيدة وأرجِع السيئة (مع إخبار OpenCode حين تُرجِع)، كي تبني كل تمريرة على قاعدة نظيفة."}]}, {"id": "extend", "heading": "AGENTS.md وMCP والجلسات القابلة للمشاركة", "blocks": [{"kind": "p", "text": "ثلاث نقاط توسيع تجعل OpenCode عمليًا لعمل التصميم المستمر، وتنطبق الثلاث جميعًا بسلاسة على سير عمل تصميم مفتوح."}, {"kind": "steps", "items": [{"label": "قواعد AGENTS.md", "body": "تعيش قواعد المشروع في AGENTS.md في جذر المستودع (أو قواعد عامة في ~/.config/opencode/AGENTS.md). إنه المنزل الدائم لأعراف التصميم لديك، يُقرأ في كل تشغيل، وهو متوافق مع ملفات CLAUDE.md التي تستخدمها وكلاء أخرى."}, {"label": "خوادم MCP", "body": "يدعم OpenCode خوادم MCP المحلية (أمر) والبعيدة (URL)، المهيّأة تحت مفتاح mcp — الطريقة المحمولة لجلب سياق التصميم والأدوات الخارجية التي تعمل عبر الوكلاء، لا OpenCode فقط."}, {"label": "جلسات قابلة للمشاركة", "body": "ينشئ الأمر /share رابطًا عامًا لمحادثة للتعاون أو المراجعة، ويلغيه /unshare — مفيد للحصول على ملاحظات على تمريرة تصميم."}]}, {"kind": "p", "text": "هذه قدرات محمولة متعددة الوكلاء — تمامًا نوع الشيء الذي بُني Open Design لتنسيقه، بدلًا من إعادة بنائه لكل مشروع."}]}, {"id": "vs", "heading": "‏OpenCode مقابل Codex مقابل Claude Code مقابل Cursor للتصميم", "blocks": [{"kind": "p", "text": "لا يوجد فائز واحد في عمل التصميم — فلكل وكيل قوة مختلفة، والفرق المتمرّسة تجمع بينها. وإليك خلاصة منصفة:"}, {"kind": "table", "columns": ["الوكيل", "قوة التصميم", "الأنسب لـ"], "rows": [["OpenCode", "مفتوح المصدر ومحايد للنماذج؛ شغّل أي مزوّد خلف سير عمل طرفي واحد", "حرية BYOK، وتبديل النماذج، والإعدادات المفتوحة والمحلية أولًا بالكامل"], ["Codex", "صقل بصري قوي مع frontend skill؛ فهم للصور", "غير المتزامن المفوّض، عمليات البناء المعزولة، قواعد AGENTS.md المحمولة"], ["Claude Code", "قرارات تصميم محددة (hex، مسافات، خطوط) وتجربة مستخدم واعية بقاعدة الشيفرة", "تفكير الواجهة الأمامية وإعادة الهيكلة بسياق واسع"], ["Cursor", "حلقة بناء-ومشاهدة بصرية مع معاينة حيّة وتحريرات مضمّنة", "عمل واجهة محكم بالتكرار-والمراقبة داخل بيئة تطوير"]]}, {"kind": "p", "text": "الحكم المتكرر في المجتمع أن الذوق يأتي من البشر: فجميعها تتجه افتراضيًا إلى مظهر عام دون skills ومراجع وقيود. تلك هي المشكلة الحقيقية التي ينبغي حلّها — وهي بشكل أداة تصميم، لا بشكل نموذج، وهذا بالضبط سبب تلاؤم وكيل مفتوح مثل OpenCode تلاؤمًا جيدًا مع طبقة تصميم مفتوحة."}]}, {"id": "pitfalls", "heading": "المزالق، وكيف تتجنّب مظهر «فوضى الذكاء الاصطناعي»", "blocks": [{"kind": "p", "text": "أكثر شكوى شيوعًا عن التصميم المولَّد بالذكاء الاصطناعي أنه يبدو عامًا — تدرّجات ناعمة، لوحات عائمة، زوايا دائرية مفرطة الحجم، ظلال دراميّة، أجواء Inter-والبنفسجي «تصرخ بأن ذكاءً اصطناعيًا صنع هذا.» وتشمل المشكلات الأخرى المبلَّغ عنها انكسار تخطيطات الجوال وتسرّب التعليمات إلى نصوص الواجهة. وليست أيٌّ منها خاصةً بـ OpenCode؛ بل هي ما يحدث حين يعمل أي وكيل دون سياق تصميم منسّق."}, {"kind": "steps", "items": [{"label": "أضف skill جماليًا", "body": "skill تصميم منسّق يجبر الوكيل على الالتزام باتجاه حقيقي بدلًا من المظهر الافتراضي."}, {"label": "تحقق في متصفح حقيقي", "body": "اعرض وتحقق ذاتيًا عبر نقاط التوقف كي لا تنكسر التخطيطات بصمت على الجوال."}, {"label": "زوّده بالـ tokens والمراجع", "body": "tokens التصميم الحقيقية ولقطات الشاشة المرجعية هي أكبر رافعة منفردة على جودة المخرجات."}, {"label": "رمّز القواعد في AGENTS.md", "body": "ضع قواعد بأسلوب «لا بطاقات بطل، خطّان كحد أقصى، هرمية تقدّم العلامة» حيث يقرؤها الوكيل في كل تشغيل."}]}, {"kind": "p", "text": "لاحظ أن كل إجراء تخفيف يتمحور حول منح الوكيل سياق تصميم منسّقًا — بمعزل عن النموذج الذي تشغّله. والحفاظ على ذلك السياق يدويًا، لكل مشروع، هو الكدّ الذي يزيله Open Design."}]}, {"id": "open-design", "heading": "التصميم بـ OpenCode داخل Open Design", "blocks": [{"kind": "p", "text": "‏Open Design هو طبقة التصميم مفتوحة المصدر التي يطلبها سير العمل أعلاه باستمرار. يعامل OpenCode بصفته محوّلًا أصيلًا ويغلّفه بمكتبة منسّقة من الـ skills وأنظمة التصميم، وخط معالجة عرض منظّم، وواجهة سطح مكتب محلية — كي يكون سياق التصميم الذي يجعل أي وكيل جيدًا حاضرًا من أول تشغيل، لا مُجمَّعًا يدويًا في كل مرة. وكلا المشروعين مفتوحا المصدر ومحليان أولًا، ما يجعل الاقتران ملائمًا بطبيعته."}, {"kind": "ol", "items": ["ثبّت Open Design واختر OpenCode وكيلًا لك.", "صادِق بمفتاح API الخاص بمزوّد نماذجك (مبدأ BYOK) — تبقى بيانات الاعتماد على جهازك ولا تُمرَّر عبرنا أبدًا.", "اختر أي مزوّد ونموذج، إضافةً إلى نظام تصميم وskill، ثم ولّد العروض والنماذج الأولية وصفحات الهبوط بذوق متّسق.", "كل أثر وكل ملف DESIGN.md يعيش في مستودعك الخاص، لا في سحابة مستضافة."]}, {"kind": "p", "text": "وكيل OpenCode نفسه، حرية النماذج نفسها — إضافةً إلى سير عمل تصميمي حقيقي ومحمول ومفتوح المصدر يحيط به. إنه محلي أولًا وبرخصة Apache-2.0، فلا شيء عن عملك أو بيانات اعتمادك يغادر جهازك."}]}], "faqTitle": "الأسئلة الشائعة", "faq": [{"name": "هل يستطيع OpenCode فعلًا أداء عمل التصميم؟", "text": "نعم — مع skill جمالي ونظام تصميم وصور مرجعية حقيقية في السياق، ينتج OpenCode واجهة بجودة إنتاجية ومتجاوبة ويمكنه التحقق منها في متصفح. ولأنه محايد للنماذج، تشغّل النموذج الأفضل حاليًا في الواجهة الأمامية. وبدون ذلك السياق المنسّق يميل إلى مظهر عام، وهي الفجوة التي يسدّها Open Design."}, {"name": "أي نموذج ينبغي أن أستخدم مع OpenCode للتصميم؟", "text": "أيًّا أحببت — OpenCode محايد للمزوّدين عبر models.dev، فيمكنك تشغيل Anthropic أو OpenAI أو Google أو OpenRouter أو نماذج محلية خلف سير العمل نفسه والتبديل في أي وقت. وتعتمد جودة مخرجات التصميم على skill ونظام تصميمك ومراجعك أكثر بكثير من النموذج وحده."}, {"name": "هل صنع Open Design فريق OpenCode (SST)؟", "text": "لا. Open Design مشروع مستقل مفتوح المصدر يدمج OpenCode بصفته وكيلًا. وهو يكمّل OpenCode بمكتبة skills وأنظمة تصميم مفتوحة ومحلية أولًا."}, {"name": "هل أحتاج إلى اشتراك خاص للتصميم بـ OpenCode؟", "text": "لا — OpenCode يقوم على مبدأ BYOK. تُحضر مفتاح API الخاص بمزوّد نماذجك، ولا يمرّر Open Design بيانات اعتمادك أبدًا. ولا يوجد ارتباط بمزوّد."}, {"name": "‏OpenCode أم Codex أم Claude Code لتصميم الواجهة الأمامية؟", "text": "جميعها قوية، وفرق كثيرة تجمع بينها. ميزة OpenCode أنه مفتوح المصدر بالكامل ومحايد للنماذج؛ ويتفوّق Codex في عمليات البناء المفوّضة المعزولة؛ ويُعرَف Claude Code بقرارات تصميم محددة وواعية بقاعدة الشيفرة. ويتيح لك Open Design تبديل الوكلاء دون تغيير سير عمل التصميم."}, {"name": "كيف أوسّع OpenCode من أجل سياق التصميم؟", "text": "رمّز القواعد في AGENTS.md، وأضِف خوادم MCP تحت مفتاح mcp للأدوات المحمولة وسياق التصميم، واستخدم الجلسات القابلة للمشاركة للمراجعة. ويقدّم Open Design مكتبة منسّقة من الـ skills وأنظمة التصميم كي تتخطّى الإعداد لكل مشروع."}, {"name": "هل Open Design تابع لـ OpenCode أو SST؟", "text": "لا. OpenCode مشروع مفتوح المصدر يصونه SST (Anomaly Innovations)؛ وOpen Design مشروع مستقل مفتوح المصدر يدعمه بصفته محوّلًا أصيلًا."}, {"name": "هل ملفاتي وبيانات اعتمادي آمنة؟", "text": "نعم — Open Design محلي أولًا. تبقى ملفاتك وآثارك وملف DESIGN.md في مستودعك الخاص، وتُستخدَم بيانات اعتماد مزوّد نماذجك مباشرةً بواسطة وكيلك، ولا تُمرَّر عبر خوادم Open Design أبدًا."}], "ctaTitle": "صمّم بـ OpenCode، بالطريقة المفتوحة.", "ctaBody": "أحضر مفتاح مزوّد نماذجك الخاص، واحتفظ بكل ملف محليًا، واحصل على مكتبة تصميم منسّقة حول الوكيل المفتوح الذي تستخدمه أصلًا.", "ctaActions": [{"label": "استخدم OpenCode داخل Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "ضع نجمة على GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "نزّل تطبيق سطح المكتب", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "اعرض كل الوكلاء المدعومين"}, + }, + }, + 'tr': { + 'claude-code': { + ...en['claude-code']!, + title: "Tasarım için Claude Code — Open Design", + description: "Tasarımcılar Claude Code'u UI ve web tasarımı için nasıl kullanır ve Open Design onu nasıl gerçek bir tasarım ajanına dönüştürür — yerel öncelikli, BYOK, özenle seçilmiş skill ve tasarım sistemi kütüphanesiyle.", + breadcrumb: "Claude Code", + label: "Ajan · Claude Code", + heading: "Tasarım için Claude Code.", + lead: "Claude Code, Anthropic'in terminal kodlama ajanıdır. İnsanlar onu zaten UI'lar, tasarım sistemleri ve açılış sayfaları oluşturmak için kullanıyor. Open Design onu gerçek bir tasarım iş akışına bağlar — Anthropic anahtarınızı veya Claude aboneliğinizi getirin, her dosyayı yerel tutun.", + rich: {"heroCtaLead": "Open Design, Claude Code'u yerel öncelikli, açık kaynaklı bir tasarım ajanına dönüştürür — Anthropic anahtarınız veya Claude aboneliğiniz, dosyalarınız ve etrafında özenle seçilmiş bir skill ve tasarım sistemi kütüphanesi.", "heroCtaActions": [{"label": "Claude Code'u Open Design içinde kullanın", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub'da yıldız verin", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Masaüstü uygulamasını indirin", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code, frontend konusunda en iyi zevke sahip kodlama ajanı olarak yaygın biçimde kabul edilir — arayüzler üzerinde alışılmadık bir kesinlikle akıl yürütür, tam hex değerlerini, boşlukları ve tipografi ölçeklerini adlandırır ve büyük bir kod tabanı boyunca UI'ı, bağlamı kaybetmeden yeniden düzenler. Ama kutudan çıktığı haliyle, ona bir tasarım sistemi, skill'ler ve gerçek referanslar vermediğiniz sürece yine de jenerik bir görünüme kayar. Bu, Claude Code'u UI, frontend ve tasarım sistemi çalışmaları için kullanmaya ve onu Open Design ile yapılandırılmış bir iş akışına bağlamaya dair pratik, uçtan uca bir rehberdir.", "Claude Code'un gerçekte ne olduğunu, frontend'de neden güçlü olduğunu, sıfırdan nasıl kurulacağını, CLAUDE.md ve Skills iş akışını, resmi Figma gidiş-dönüşünü, Codex ve Cursor ile nasıl karşılaştırıldığını, AI çıktısını jenerik gösteren tuzakları ve Open Design'ın açık, yerel öncelikli bir tasarım katmanı olarak bu boşluğu nasıl kapattığını ele alır."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Claude Code tasarım geri bildirim döngüsü: spesifik tasarım kararları veren terminal ajanı, UI'ı işleyen bir tarayıcı ve bir çalışma alanı, geri döngü oluşturan bir geri bildirim okuyla", "caption": "Çekirdek döngü: Claude Code terminalde spesifik UI kararlarını akıl yürüterek belirler, bunları gerçek bir tarayıcıda işler ve doğrular, referanslarınıza karşı yakınsar."}, "tocLabel": "Bu sayfada", "toc": [{"id": "what-is-claude-code", "label": "Claude Code gerçekte nedir"}, {"id": "why-design", "label": "Claude Code tasarımda neden iyi"}, {"id": "setup", "label": "Claude Code'u tasarım için kurun (sıfırdan)"}, {"id": "skills-workflow", "label": "CLAUDE.md ve Skills iş akışı"}, {"id": "figma", "label": "Claude Code + Figma gidiş-dönüşü"}, {"id": "vs", "label": "Claude Code, Codex ve Cursor karşılaştırması"}, {"id": "pitfalls", "label": "Tuzaklar ve “AI çöplüğü” görünümü"}, {"id": "open-design", "label": "Open Design içinde Claude Code ile tasarım"}, {"id": "faq", "label": "SSS"}], "sections": [{"id": "what-is-claude-code", "heading": "Claude Code gerçekte nedir", "blocks": [{"kind": "p", "text": "Claude Code, Anthropic'in ajansal kodlama aracıdır. Kod tabanınızı okur, dosyaları düzenler, komutları çalıştırır ve geliştirme araçlarınızla entegre olur — yalnızca satırları otomatik tamamlamak yerine doğal dildeki görevlerden işi planlar, yazar ve doğrular."}, {"kind": "p", "text": "Hepsi aynı motoru paylaşan birkaç yüzey üzerinden sunulur: bir terminal CLI'si, VS Code, Cursor ve JetBrains için IDE eklentileri, görsel diff incelemesi olan bir masaüstü uygulaması ve uzun süren görevler için bir web deneyimi. CLAUDE.md dosyalarınız, ayarlarınız ve MCP sunucularınız hepsinde geçerlidir."}, {"kind": "steps", "items": [{"label": "Talimat dosyası", "body": "Claude Code, her oturumun başında proje kökünüzdeki bir CLAUDE.md dosyasını okur — tasarım kurallarınızı, token'larınızı ve inceleme kontrol listelerinizi kodlamak için doğal yer."}, {"label": "Skills", "body": "Agent Skills, Claude'un talep üzerine yüklediği yinelenebilir talimatları, betikleri ve kaynakları paketler; buna zevk için Anthropic'in resmi Frontend Design skill'i de dahildir."}, {"label": "Plan ve alt ajanlar", "body": "Eylemden önce plan yapabilir ve bir görevin farklı parçaları üzerinde paralel çalışan alt ajanlar başlatabilir; bu da büyük UI yeniden düzenlemelerini tutarlı tutar."}]}, {"kind": "ul", "items": ["Sağlayıcı: Anthropic", "Kimlik bilgisi: Anthropic API anahtarı (BYOK, Console üzerinden) veya bir Claude aboneliği (Pro / Max)", "Yüzeyler: terminal CLI, VS Code / Cursor / JetBrains eklentileri, masaüstü uygulaması, web"]}]}, {"id": "why-design", "heading": "Claude Code tasarımda neden iyi", "blocks": [{"kind": "p", "text": "Kodlama ajanları arasında Claude Code, frontend çalışmasında zevk konusunda bir üne sahiptir. Birkaç şey bunu açıklar."}, {"kind": "steps", "items": [{"label": "Belirsiz değil, spesifik kararlar", "body": "Claude Code, el sallayarak geçiştirmek yerine somut seçimlere bağlanma eğilimindedir — tam hex değerleri, boşluk ölçekleri, tipografi rampaları ve bileşen hiyerarşisi — gerçek bir arayüzü bir yer tutucudan ayıran şey de budur."}, {"label": "Kod tabanının farkında akıl yürütme", "body": "Geniş bir çalışma bağlamıyla, UI'ı bir kerede birçok dosya boyunca yeniden düzenler; tek seferlik stiller icat etmek yerine mevcut bileşenlerinizi ve token'larınızı yeniden kullanır."}, {"label": "Resmi bir frontend skill'i", "body": "Anthropic, Claude'un önce bir tasarım yönü yazmasını sağlayan ve jenerik sistem yazı tiplerinden ve tahmin edilebilir mor degradelerden bilinçli olarak uzaklaşan bir Frontend Design skill'i sunar."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Tasarım sistemi, skill ve referans görselin iyi tasarım çıktısına yakınsadığını gösteren diyagram", "caption": "Zevk, sağladığınız üç girdiden gelir: bir tasarım sistemi, bir skill ve gerçek referans görseller."}, {"kind": "p", "text": "Çıkarılan ders, Anthropic'in kendi modelleri hakkında söylediğiyle aynıdır: Claude varsayılan olarak zevke sahip değildir — kendi haline bırakılırsa web tasarımının istatistiksel merkezine yakınsar (Inter, mor degradeler, yumuşak gölgeler). Ona kısıtlar verdiğinizde iyi tasarım üretir. Open Design tam olarak bu girdileri paketler; ikisinin neden birbirine uyduğunun nedeni de budur (daha fazlası aşağıda)."}]}, {"id": "setup", "heading": "Claude Code'u tasarım çalışması için sıfırdan kurun", "blocks": [{"kind": "p", "text": "Temiz bir makineden, UI oluşturabilen ve doğrulayabilen bir Claude Code'a giden tam yol şudur."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Beş adımlı kurulum akışı: kur, kimlik doğrula, CLAUDE.md yapılandır, skill ekle, doğrula", "caption": "Kurulum sırası: kur → kimlik doğrula → CLAUDE.md yapılandır → Frontend Design skill'ini ekle → tarayıcı doğrulamasını etkinleştir."}, {"kind": "steps", "items": [{"label": "Tasarım kurallarınızı kodlayın", "body": "Token'larınızı, ilkellerinizi ve kurallarınızı CLAUDE.md içine koyun ve Claude'u bunlara yönlendirin; böylece çıktı jenerik bir görünüme dönmek yerine bir markayla eşleşsin."}, {"label": "Tarayıcı doğrulaması ekleyin", "body": "Bir Playwright veya Chrome MCP bağlayın, böylece Claude yalnızca derlemenin geçtiğini onaylamak yerine gerçek bir tarayıcıda işlesin ve çıktısını kırılma noktaları boyunca kontrol etsin."}]}]}, {"id": "skills-workflow", "heading": "CLAUDE.md ve Skills iş akışı", "blocks": [{"kind": "p", "text": "Claude Code ile en yüksek kaldıraçlı tasarım döngüsü, ona gerçek referansları artı tasarım bağlamınızı beslemek ve ardından UI eşleşene kadar yinelemektir — CLAUDE.md ve Skills kısıtları taşır, böylece bunları her komutta yeniden açıklamazsınız."}, {"kind": "ol", "items": ["Sahip olduğunuz en net görsel referanslardan başlayın — ve yalnızca tek bir hero görseli değil, birden çok durumu (masaüstü ve mobil, hover, boş, yükleniyor) dahil edin.", "Komutta spesifik olun; belirsiz komutlar, güçlü bir ajanla bile jenerik UI üretir.", "Tasarım sisteminizi ve kurallarınızı CLAUDE.md içinde tutun ve Claude'a token'ların ve kanonik ilkellerin nerede yaşadığını söyleyin.", "Frontend Design skill'ini ekleyin, böylece Claude kod yazmadan önce gerçek bir estetik yöne bağlansın.", "Tarayıcı doğrulamasını bağlayın, böylece Claude işlesin, kırılma noktalarına yeniden boyutlandırsın ve referanslarla karşılaştırsın — yalnızca derlendiğini onaylamasın."]}, {"kind": "p", "text": "Oturuma bir referans görseli bırakın ve somut kısıtlarla komut verin:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Yanında bir dev sunucusu çalıştırın, komutları küçük ve odaklı tutun, iyi yinelemeleri commit edin / kötü olanları geri alın (geri aldığınızda Claude'a söyleyin), böylece her geçiş temiz bir temel üzerine inşa edilsin. Büyük yeniden düzenlemeler için plan modunu kullanın, böylece herhangi bir dosya değişikliğinden önce yaklaşımı inceleyebilirsiniz."}]}, {"id": "figma", "heading": "Claude Code + Figma: tasarım ↔ kod gidiş-dönüşü", "blocks": [{"kind": "p", "text": "Şubat 2026'da Anthropic ve Figma, Figma MCP sunucusu aracılığıyla birinci sınıf, çift yönlü bir entegrasyon yayınladı. Her iki yönde de çalışır."}, {"kind": "steps", "items": [{"label": "Tasarım → Kod", "body": "Figma'da bir frame seçin veya Claude Code'a bir bağlantı yapıştırın, tasarım bağlamını çekin ve ondan mevcut bileşen kütüphanenizi kullanarak tasarımı uygulamasını isteyin. Code Connect, çıktıyı gerçek bileşenlerinizle hizalı tutar."}, {"label": "Kod → Tasarım", "body": "Bir özelliği tarayıcıda oluşturup önizleyin, ardından çalışan UI'ı düzenlenebilir Figma katmanları olarak yakalamak için “Send this to Figma” deyin — tüm ekran veya seçili bir öğe."}]}, {"kind": "p", "text": "Bir kez claude plugin install figma@claude-plugins-official ile kurun (Dev Mode MCP, ücretli bir Figma planı gerektirir). Aynı Figma MCP; Claude Code, Codex, Cursor ve VS Code için kullanılabilir — tam olarak Open Design'ın düzenlemek için inşa edildiği türden taşınabilir, çok ajanlı bir yetenek."}]}, {"id": "vs", "heading": "Tasarım için Claude Code, Codex ve Cursor", "blocks": [{"kind": "p", "text": "Tasarım çalışması için tek bir kazanan yoktur — her ajanın farklı bir gücü vardır ve deneyimli ekipler bunları üst üste yığar. Adil bir özet:"}, {"kind": "table", "columns": ["Ajan", "Tasarım gücü", "En iyi olduğu alan"], "rows": [["Claude Code", "Spesifik tasarım kararları (hex, boşluk, tipografi) ve kod tabanının farkında UX akıl yürütmesi", "Frontend akıl yürütmesi ve geniş bağlamlı yeniden düzenlemeler"], ["Codex", "Güçlü görsel cila ve görsel anlama; sandbox'lanmış asenkron derlemeler", "Devredilen asenkron derlemeler ve taşınabilir AGENTS.md kuralları"], ["Cursor", "Canlı önizleme ve satır içi düzenlemelerle görsel oluştur-ve-gör döngüsü", "Bir IDE içinde sıkı yinele-ve-izle UI çalışması"]]}, {"kind": "p", "text": "Tekrarlanan topluluk kararı, zevkin insanlardan geldiğidir: üçü de skill'ler, referanslar ve kısıtlar olmadan jenerik bir estetiğe varsayılan olarak kayar. Çözülmesi gereken asıl sorun budur — ve bu sorun, model biçimli değil, tasarım aracı biçimlidir."}]}, {"id": "pitfalls", "heading": "Tuzaklar ve “AI çöplüğü” görünümünden nasıl kaçınılır", "blocks": [{"kind": "p", "text": "Claude Code'un zevk konusundaki ününe rağmen, AI tarafından üretilen tasarımla ilgili en yaygın şikayet, jenerik görünmesidir — Inter yazı tipleri, beyaz üzerine mor degradeler, yumuşak gölgeler, aşırı büyük yuvarlatılmış köşeler, “bunu bir AI yaptı diye bağıran” bir estetik. Anthropic bunu dağılımsal yakınsamaya bağlar: güvenli seçimler web eğitim verilerine hakimdir. Bildirilen diğer sorunlar arasında bozuk mobil düzenler ve UI metnine sızan talimatlar yer alır."}, {"kind": "steps", "items": [{"label": "Frontend Design skill'ini kurun", "body": "Claude'u gerçek bir yöne bağlanmaya zorlar ve AI tarafından aşırı kullanılan yazı tiplerinden ve degradelerden açıkça kaçınır."}, {"label": "Tarayıcı doğrulamasını etkinleştirin", "body": "Claude'un kırılma noktaları boyunca işlemesini ve kendi kendini kontrol etmesini sağlayın, böylece düzenler mobilde sessizce bozulmasın."}, {"label": "Token ve referans sağlayın", "body": "Gerçek tasarım token'ları ve referans ekran görüntüleri, çıktı kalitesi üzerindeki en büyük tek kaldıraçtır."}, {"label": "Kuralları CLAUDE.md içinde kodlayın", "body": "“hero kartı yok, en fazla iki yazı tipi, marka öncelikli hiyerarşi” gibi kuralları, ajanın her çalıştırmada okuduğu yere koyun."}]}, {"kind": "p", "text": "Her hafifletmenin, ajana özenle seçilmiş bir tasarım bağlamı vermekle ilgili olduğuna dikkat edin. Bu bağlamı proje başına elle sürdürmek, Open Design'ın ortadan kaldırdığı zahmettir."}]}, {"id": "open-design", "heading": "Open Design içinde Claude Code ile tasarım", "blocks": [{"kind": "p", "text": "Open Design, yukarıdaki iş akışının sürekli istediği açık kaynaklı tasarım katmanıdır. Claude Code'u birinci taraf bir adaptör olarak ele alır ve onu özenle seçilmiş bir skill ve tasarım sistemi kütüphanesi, yapılandırılmış bir render hattı ve yerel bir masaüstü UI'sı ile sarmalar — böylece Claude Code'u iyi yapan tasarım bağlamı, her seferinde elle bir araya getirilmek yerine ilk çalıştırmadan itibaren oradadır."}, {"kind": "ol", "items": ["Open Design'ı kurun ve ajanınız olarak Claude Code'u seçin.", "Anthropic API anahtarınız (BYOK) veya Claude aboneliğinizle kimlik doğrulayın — kimlik bilgileri makinenizde kalır ve asla bizim üzerimizden proxy'lenmez.", "Bir tasarım sistemi ve bir skill seçin, ardından tutarlı bir zevkle sunumlar, prototipler ve açılış sayfaları üretin.", "Her artefakt ve DESIGN.md dosyası, barındırılan bir bulutta değil, kendi reponuzda yaşar."]}, {"kind": "p", "text": "Aynı Claude Code ajanı, aynı anahtar — artı etrafında gerçek, taşınabilir, açık kaynaklı bir tasarım iş akışı. Yerel öncelikli ve Apache-2.0'dır, bu yüzden çalışmanız veya kimlik bilgileriniz hakkında hiçbir şey makinenizden ayrılmaz."}]}], "faqTitle": "Sıkça sorulan sorular", "faq": [{"name": "Claude Code tasarım çalışması için iyi mi?", "text": "Evet — frontend konusunda en iyi zevke sahip kodlama ajanı olarak yaygın biçimde kabul edilir; hex değerleri, boşluk ve tipografi ölçekleri hakkında spesifik, kod tabanının farkında kararlar verir. Frontend Design skill'i, bir tasarım sistemi ve bağlamdaki gerçek referans görsellerle, üretim kalitesinde, duyarlı UI üretir ve bunu bir tarayıcıda doğrulayabilir. Bu bağlam olmadan jenerik bir görünüme dönme eğilimindedir; Open Design'ın doldurduğu boşluk da budur."}, {"name": "Claude Code ile tasarım yapmak için bir Claude aboneliğine ihtiyacım var mı?", "text": "Bir Anthropic API anahtarı (BYOK, Console üzerinden) veya bir Claude aboneliği (Pro / Max) kullanabilirsiniz. Her iki durumda da Open Design kimlik bilgilerinizi asla proxy'lemez — bunlar doğrudan makinenizdeki ajanınız tarafından kullanılır."}, {"name": "Frontend tasarımı için Claude Code mı yoksa Codex mı?", "text": "İkisi de güçlüdür. Claude Code, spesifik, kod tabanının farkında tasarım kararları ve frontend akıl yürütmesiyle bilinir; Codex'in güçlü bir görsel cilası vardır ve devredilen, sandbox'lanmış derlemelerde öne çıkar. Birçok ekip ikisini de kullanır — Open Design, tasarım iş akışınızı değiştirmeden ajanlar arasında geçiş yapmanızı sağlar."}, {"name": "Claude Code'u Figma'ya nasıl bağlarım?", "text": "Resmi Figma eklentisini claude plugin install figma@claude-plugins-official ile kurun. Ardından tasarım bağlamını kullanarak Figma frame'lerini kod olarak uygulayabilir ve çalışan bir UI'ı “Send this to Figma” ile düzenlenebilir Figma frame'lerine geri gönderebilirsiniz. Dev Mode MCP, ücretli bir Figma planı gerektirir."}, {"name": "Skills ve CLAUDE.md nedir?", "text": "CLAUDE.md, Claude Code'un her oturumun başında okuduğu, proje kökünüzdeki bir markdown dosyasıdır — tasarım kurallarınızı kodlama yeri. Skills, Claude'un talep üzerine yüklediği yinelenebilir talimatları ve kaynakları paketler; buna Anthropic'in resmi Frontend Design skill'i de dahildir. Open Design her ikisinden de özenle seçilmiş bir kütüphane sunar, böylece proje başına kurulumu atlarsınız."}, {"name": "Jenerik “AI çöplüğü” estetiğinden nasıl kaçınırım?", "text": "Frontend Design skill'ini kurun, gerçek tasarım token'ları ve referans ekran görüntüleri sağlayın, marka kurallarını CLAUDE.md içinde kodlayın ve tarayıcı doğrulamasını etkinleştirin. Open Design bunları özenle seçilmiş bir kütüphane olarak sunar, böylece proje başına kurulumu atlarsınız."}, {"name": "Open Design, Anthropic ile bağlantılı mı?", "text": "Hayır. Claude Code, Anthropic'in bir ürünüdür; Open Design, onu birinci taraf bir adaptör olarak destekleyen bağımsız bir açık kaynaklı projedir. Claude ve Claude Code, Anthropic'in ticari markalarıdır."}, {"name": "Dosyalarım ve kimlik bilgilerim güvende mi?", "text": "Evet — Open Design yerel öncelikli ve Apache-2.0'dır. Dosyalarınız, artefaktlarınız ve DESIGN.md'niz kendi reponuzda kalır ve Anthropic kimlik bilgileriniz doğrudan ajanınız tarafından kullanılır, asla Open Design sunucuları üzerinden yönlendirilmez."}], "ctaTitle": "Claude Code ile açık yolla tasarlayın.", "ctaBody": "Kendi Anthropic anahtarınızı veya Claude aboneliğinizi getirin, her dosyayı yerel tutun ve zaten kullandığınız ajanın etrafında özenle seçilmiş bir tasarım kütüphanesi edinin.", "ctaActions": [{"label": "Claude Code'u Open Design içinde kullanın", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub'da yıldız verin", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Masaüstü uygulamasını indirin", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Desteklenen tüm ajanları görün"}, + }, + 'codex': { + ...en['codex']!, + title: "Tasarım için Codex — Open Design", + description: "İnsanlar OpenAI Codex'i UI ve web tasarımı için nasıl kullanır — Product Design eklentisi, Figma entegrasyonu, frontend skill'leri — ve Open Design Codex'i nasıl yerel öncelikli, açık kaynaklı bir tasarım ajanına dönüştürür.", + breadcrumb: "Codex", + label: "Ajan · Codex", + heading: "Tasarım için Codex.", + lead: "Codex, OpenAI'nin kodlama ajanıdır. Product Design eklentisi ve Figma entegrasyonu ile ciddi bir tasarım aracı haline geldi. Open Design, Codex'i açık kaynaklı bir tasarım iş akışına bağlar — OpenAI anahtarınız veya ChatGPT aboneliğiniz, dosyalarınız, yerel öncelikli.", + rich: {"heroCtaLead": "Open Design, Codex'i yerel öncelikli, açık kaynaklı bir tasarım ajanına dönüştürür — OpenAI anahtarınız, dosyalarınız ve etrafında özenle seçilmiş bir skill ve tasarım sistemi kütüphanesi.", "heroCtaActions": [{"label": "Codex'i Open Design içinde kullanın", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub'da yıldız verin", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Masaüstü uygulamasını indirin", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex bir kod üreticisi olarak başladı, ancak 2026'da — ona doğru referansları, skill'leri ve doğrulama döngüsünü verdiğinizde — gerçek arayüzler tasarlamak için inandırıcı bir araç haline geldi. Bu, Codex'i UI, frontend ve tasarım sistemi çalışmaları için kullanmaya ve onu Open Design ile yapılandırılmış bir tasarım iş akışına bağlamaya dair pratik, uçtan uca bir rehberdir.", "Codex'in bugün ne olduğunu, frontend'de neden birden iyi olduğunu, sıfırdan nasıl kurulacağını, ekran görüntüsünden UI'a döngüyü, resmi Figma gidiş-dönüşünü, Cursor ve Claude Code ile nasıl karşılaştırıldığını, AI çıktısını jenerik gösteren tuzakları ve Open Design'ın açık, yerel öncelikli bir tasarım katmanı olarak bu boşluğu nasıl kapattığını ele alır."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Codex tasarım geri bildirim döngüsü: terminal ajanı, UI'ı işleyen tarayıcı ve bir çalışma alanı, geri döngü oluşturan bir geri bildirim okuyla", "caption": "Çekirdek döngü: Codex terminalde UI oluşturur, bunu gerçek bir tarayıcıda işler ve doğrular, referanslarınıza karşı yineler."}, "tocLabel": "Bu sayfada", "toc": [{"id": "what-is-codex", "label": "OpenAI Codex gerçekte nedir"}, {"id": "why-design", "label": "Codex artık tasarımda neden iyi"}, {"id": "setup", "label": "Codex'i tasarım için kurun (sıfırdan)"}, {"id": "screenshot-workflow", "label": "Ekran görüntüsünden UI'a iş akışı"}, {"id": "figma", "label": "Codex + Figma gidiş-dönüşü"}, {"id": "vs", "label": "Codex, Cursor ve Claude Code karşılaştırması"}, {"id": "pitfalls", "label": "Tuzaklar ve “AI çöplüğü” görünümü"}, {"id": "open-design", "label": "Open Design içinde Codex ile tasarım"}, {"id": "faq", "label": "SSS"}], "sections": [{"id": "what-is-codex", "heading": "OpenAI Codex gerçekte nedir (ve ne değildir)", "blocks": [{"kind": "p", "text": "Önce, “Codex” arayan hemen herkesi tökezleten bir kavram karmaşasını giderelim. Orijinal OpenAI Codex, erken GitHub Copilot'a güç veren ve 2023'te kullanımdan kaldırılan 2021 tarihli bir kod tamamlama modeliydi. Bu sayfanın konusu o değil. Bugünün Codex'i, OpenAI'nin ajansal kodlama aracıdır — doğal dildeki görevlerden kodu planlar, yazar, çalıştırır ve doğrular."}, {"kind": "p", "text": "Modern Codex dört yüzey üzerinden sunulur: bir terminal CLI'si (Rust ile yeniden yazılmış, Apache-2.0 lisanslı), VS Code, Cursor ve Windsurf için bir IDE eklentisi, devredilen asenkron görevler için bir bulut/web deneyimi ve uygulama içi bir tarayıcı ve Computer Use'a sahip bir masaüstü uygulaması."}, {"kind": "steps", "items": [{"label": "Varsayılan model", "body": "2026 ortası itibarıyla önerilen model gpt-5.5'tir; gpt-5.4 ise OpenAI'nin frontend ve bilgisayar kullanımı için açıkça eğittiği modeldir."}, {"label": "Talimat dosyası", "body": "Codex, proje kuralları için projenizdeki bir AGENTS.md dosyasını (araçlar arası bir standart) okur — tasarım kurallarınızı kodlamak için doğal yer."}, {"label": "Sandbox", "body": "Çekirdek düzeyinde bir sandbox'ta çalışır (varsayılan olarak workspace-write), böylece UI'ınızı düzenleyen bir ajan projenin dışına çıkamaz."}]}, {"kind": "ul", "items": ["Sağlayıcı: OpenAI", "Kimlik bilgisi: OpenAI API anahtarı (BYOK) veya ChatGPT aboneliği (Free / Go / Plus / Pro / Business / Enterprise)", "CLI'nin lisansı: Apache-2.0, açık kaynak"]}]}, {"id": "why-design", "heading": "Codex artık tasarımda neden iyi", "blocks": [{"kind": "p", "text": "2026'nın başlarında üç şey bir araya gelerek Codex'i jenerik bir kod üreticisi yerine gerçek bir tasarım aracı haline getirdi."}, {"kind": "steps", "items": [{"label": "Frontend için eğitilmiş bir model", "body": "OpenAI, frontend ve bilgisayar kullanımı için eğitilmiş ilk ana hat modeli olan GPT-5.4'ü, tasarım iş akışı boyunca çok daha iyi görsel anlama ve daha güçlü kendi kendini doğrulama ile yayınladı. Hatta son varlıklara bağlanmadan önce mood board'lar ve görsel seçenekler bile üretebilir."}, {"label": "Resmi bir frontend skill'i", "body": "openai/skills kataloğu, gerçek bir zevki dayatan özenle seçilmiş bir frontend-skill sunar: kartsız düzenler, tam genişlikte hero'lar, marka öncelikli hiyerarşi, ölçülü hareket, en fazla iki yazı tipi ve bir vurgu rengi — ve Codex'in oluşturmadan önce bir görsel tez yazmasını sağlar."}, {"label": "Tarayıcı doğrulaması", "body": "Playwright skill'i ile Codex, yalnızca derlemenin geçtiğini kontrol etmek yerine gerçek bir tarayıcı açar, kırılma noktalarına yeniden boyutlandırır ve çıktısını referansla karşılaştırır."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Tasarım sistemi, skill ve referans görselin iyi tasarım çıktısına yakınsadığını gösteren diyagram", "caption": "Zevk, sağladığınız üç girdiden gelir: bir tasarım sistemi, bir skill ve gerçek referans görseller."}, {"kind": "p", "text": "Üçünün de ardındaki ders: Codex varsayılan olarak zevke sahip değildir. Ona kısıtlar verdiğinizde iyi tasarım üretir — bir tasarım sistemi, estetik bir skill ve somut referanslar. Open Design tam olarak bu girdileri paketler; ikisinin neden birbirine uyduğunun nedeni de budur (daha fazlası aşağıda)."}]}, {"id": "setup", "heading": "Codex'i tasarım çalışması için sıfırdan kurun", "blocks": [{"kind": "p", "text": "Temiz bir makineden, UI oluşturabilen ve doğrulayabilen bir Codex'e giden tam yol şudur."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Beş adımlı kurulum akışı: kur, kimlik doğrula, yapılandır, skill kur, doğrula", "caption": "Kurulum sırası: kur → kimlik doğrula → AGENTS.md yapılandır → frontend skill'ini kur → tarayıcı doğrulamasını etkinleştir."}, {"kind": "steps", "items": [{"label": "Tasarım kurallarınızı kodlayın", "body": "Token'larınızı, ilkellerinizi ve kurallarınızı AGENTS.md veya bir DESIGN.md içine koyun ve Codex'i bunlara yönlendirin; böylece çıktı jenerik bir görünüme dönmek yerine bir markayla eşleşsin."}, {"label": "Doğru akıl yürütme seviyesini seçin", "body": "OpenAI, düşük-orta akıl yürütme seviyelerinin sıklıkla en yüksek ayardan daha güçlü frontend sonuçları ürettiğini belirtiyor."}]}]}, {"id": "screenshot-workflow", "heading": "Ekran görüntüsünden UI'a iş akışı", "blocks": [{"kind": "p", "text": "Codex ile en yüksek kaldıraçlı tasarım döngüsü, bir referans görseli çalışan, duyarlı bir UI'a dönüştürmek ve eşleşene kadar yinelemektir. OpenAI'nin kendi rehberliği beş adıma indirgenir."}, {"kind": "ol", "items": ["Sahip olduğunuz en net görsel referanslardan başlayın — ve yalnızca tek bir hero görseli değil, birden çok durumu (masaüstü ve mobil, hover, boş, yükleniyor) dahil edin.", "Komutta spesifik olun; belirsiz komutlar jenerik UI üretir.", "Bir tasarım sistemi hazırlayın ve Codex'e token'ların ve kanonik ilkellerin nerede yaşadığını söyleyin.", "Playwright etkileşimli skill'ini etkinleştirin, böylece Codex gerçek bir tarayıcıda işler ve kırılma noktalarına yeniden boyutlandırır.", "Codex'in uygulamasını ekran görüntüleriyle karşılaştırmasını sağlayarak yineleyin — yalnızca derlendiğini onaylamasın."]}, {"kind": "p", "text": "Bir ekran görüntüsünü terminale sürükleyerek veya image bayrağı ile görselleri besleyin, ardından somut kısıtlarla komut verin:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "İkinci bir terminalde bir dev sunucusu çalıştırın, komutları küçük ve odaklı tutun ve iyi yinelemeleri commit edin / kötü olanları geri alın (geri aldığınızda Codex'e söyleyin), böylece her geçiş temiz bir temel üzerine inşa edilsin."}]}, {"id": "figma", "heading": "Codex + Figma: tasarım ↔ kod gidiş-dönüşü", "blocks": [{"kind": "p", "text": "Şubat 2026'da OpenAI ve Figma resmi bir ortaklık duyurarak önceki Figma MCP beta'sını birinci sınıf, çift yönlü bir entegrasyona dönüştürdü. Her iki yönde de çalışır."}, {"kind": "steps", "items": [{"label": "Tasarım → Kod", "body": "Figma'da bir frame'in “link to selection” bağlantısını kopyalayın, onu get_design_context ile Codex'e yapıştırın ve ondan mevcut bileşen kütüphanenizi kullanarak tasarımı uygulamasını isteyin."}, {"label": "Kod → Tasarım", "body": "generate_figma_design aracı (“Code to Canvas”), canlı, çalışan bir UI'ı düzenlenebilir Figma frame'lerine geri dönüştürür — tüm ekran, seçili bir öğe veya bütün bir dosya."}]}, {"kind": "p", "text": "Figma MCP, uzak bir sunucu olarak çalışır ve hız sınırlarından muaftır. Bir kez ekleyin ve Codex, Claude Code, Cursor, VS Code ve daha fazlası için kullanılabilir olsun — tam olarak Open Design'ın düzenlemek için inşa edildiği türden taşınabilir, çok ajanlı bir yetenek."}]}, {"id": "vs", "heading": "Tasarım için Codex, Cursor ve Claude Code", "blocks": [{"kind": "p", "text": "Tasarım çalışması için tek bir kazanan yoktur — her ajanın farklı bir gücü vardır ve deneyimli ekipler bunları üst üste yığar. Adil bir özet:"}, {"kind": "table", "columns": ["Ajan", "Tasarım gücü", "En iyi olduğu alan"], "rows": [["Codex", "GPT-5.4 + frontend-skill sonrası güçlü görsel cila; görsel anlama", "Devredilen asenkron derlemeler, sandbox'lanmış çalıştırmalar, taşınabilir AGENTS.md kuralları"], ["Cursor", "Canlı önizleme ve satır içi düzenlemelerle görsel oluştur-ve-gör döngüsü", "Bir IDE içinde sıkı yinele-ve-izle UI çalışması"], ["Claude Code", "Spesifik tasarım kararları (hex, boşluk, tipografi) ve kod tabanının farkında UX", "Frontend akıl yürütmesi ve geniş bağlamlı yeniden düzenlemeler"]]}, {"kind": "p", "text": "Tekrarlanan topluluk kararı, zevkin insanlardan geldiğidir: üçü de skill'ler, referanslar ve kısıtlar olmadan jenerik bir estetiğe varsayılan olarak kayar. Çözülmesi gereken asıl sorun budur — ve bu sorun, model biçimli değil, tasarım aracı biçimlidir."}]}, {"id": "pitfalls", "heading": "Tuzaklar ve “AI çöplüğü” görünümünden nasıl kaçınılır", "blocks": [{"kind": "p", "text": "Codex tarafından üretilen tasarımla ilgili en yaygın şikayet, jenerik görünmesidir — yumuşak degradeler, yüzen paneller, aşırı büyük yuvarlatılmış köşeler, dramatik gölgeler, “bunu bir AI yaptı diye bağıran” bir Inter-ve-mor havası. Bildirilen diğer sorunlar arasında bozuk mobil düzenler, UI metnine sızan talimatlar ve kullanım sınırlarına hızla ulaşmak yer alır."}, {"kind": "steps", "items": [{"label": "Bir frontend skill'i kurun", "body": "Özenle seçilmiş bir estetik skill, Codex'i varsayılan görünüm yerine gerçek bir yöne bağlanmaya zorlar."}, {"label": "Playwright doğrulamasını etkinleştirin", "body": "Codex'in kırılma noktaları boyunca işlemesini ve kendi kendini kontrol etmesini sağlayın, böylece düzenler mobilde sessizce bozulmasın."}, {"label": "Token ve referans sağlayın", "body": "Gerçek tasarım token'ları ve referans ekran görüntüleri, çıktı kalitesi üzerindeki en büyük tek kaldıraçtır."}, {"label": "Kuralları AGENTS.md içinde kodlayın", "body": "“hero kartı yok, en fazla iki yazı tipi, marka öncelikli hiyerarşi” gibi kuralları, ajanın her çalıştırmada okuduğu yere koyun."}]}, {"kind": "p", "text": "Her hafifletmenin, ajana özenle seçilmiş bir tasarım bağlamı vermekle ilgili olduğuna dikkat edin. Bu bağlamı proje başına elle sürdürmek, Open Design'ın ortadan kaldırdığı zahmettir."}]}, {"id": "open-design", "heading": "Open Design içinde Codex ile tasarım", "blocks": [{"kind": "p", "text": "Open Design, yukarıdaki iş akışının sürekli istediği açık kaynaklı tasarım katmanıdır. Codex'i birinci taraf bir adaptör olarak ele alır ve onu özenle seçilmiş bir skill ve tasarım sistemi kütüphanesi, yapılandırılmış bir render hattı ve yerel bir masaüstü UI'sı ile sarmalar — böylece Codex'i iyi yapan tasarım bağlamı, her seferinde elle bir araya getirilmek yerine ilk çalıştırmadan itibaren oradadır."}, {"kind": "ol", "items": ["Open Design'ı kurun ve ajanınız olarak Codex'i seçin.", "OpenAI API anahtarınız (BYOK) veya ChatGPT aboneliğinizle kimlik doğrulayın — kimlik bilgileri makinenizde kalır ve asla bizim üzerimizden proxy'lenmez.", "Bir tasarım sistemi ve bir skill seçin, ardından tutarlı bir zevkle sunumlar, prototipler ve açılış sayfaları üretin.", "Her artefakt ve DESIGN.md dosyası, barındırılan bir bulutta değil, kendi reponuzda yaşar."]}, {"kind": "p", "text": "Aynı Codex ajanı, aynı anahtar — artı etrafında gerçek, taşınabilir, açık kaynaklı bir tasarım iş akışı. Yerel öncelikli ve Apache-2.0'dır, bu yüzden çalışmanız veya kimlik bilgileriniz hakkında hiçbir şey makinenizden ayrılmaz."}]}], "faqTitle": "Sıkça sorulan sorular", "faq": [{"name": "OpenAI Codex gerçekten tasarım çalışması yapabilir mi?", "text": "Evet — bağlamda bir frontend skill'i, bir tasarım sistemi ve gerçek referans görsellerle Codex (özellikle GPT-5.4 üzerinde) üretim kalitesinde, duyarlı UI üretir ve bunu bir tarayıcıda doğrulayabilir. Bu bağlam olmadan jenerik bir görünüme dönme eğilimindedir; Open Design'ın doldurduğu boşluk da budur."}, {"name": "Bu, OpenAI Codex Product Design eklentisi mi?", "text": "Hayır. Open Design, Codex'i bir ajan olarak entegre eden bağımsız bir açık kaynaklı projedir. OpenAI'nin kendi araçlarını yerel öncelikli, açık bir skill ve tasarım sistemi kütüphanesiyle tamamlar."}, {"name": "Codex ile tasarım yapmak için bir ChatGPT aboneliğine ihtiyacım var mı?", "text": "Bir OpenAI API anahtarı (BYOK) veya ChatGPT aboneliğinizi kullanabilirsiniz. ChatGPT ile oturum açmak genellikle daha cömert sınırlar verir; Open Design her iki durumda da kimlik bilgilerinizi asla proxy'lemez."}, {"name": "Frontend tasarımı için Codex mi yoksa Claude Code mu?", "text": "İkisi de güçlüdür. Claude Code, spesifik, kod tabanının farkında tasarım kararlarıyla bilinir; Codex'in GPT-5.4 sonrası güçlü bir görsel cilası vardır ve devredilen, sandbox'lanmış derlemelerde öne çıkar. Birçok ekip ikisini de kullanır — Open Design, tasarım iş akışınızı değiştirmeden ajanlar arasında geçiş yapmanızı sağlar."}, {"name": "Codex'i Figma'ya nasıl bağlarım?", "text": "Resmi Figma MCP sunucusunu ekleyin (codex mcp add figma --url https://mcp.figma.com/mcp). Ardından get_design_context ile Figma frame'lerini kod olarak uygulayabilir ve çalışan bir UI'ı generate_figma_design ile düzenlenebilir Figma frame'lerine geri gönderebilirsiniz."}, {"name": "Jenerik “AI çöplüğü” estetiğinden nasıl kaçınırım?", "text": "Bir frontend skill'i kurun, gerçek tasarım token'ları ve referans ekran görüntüleri sağlayın, marka kurallarını AGENTS.md içinde kodlayın ve Playwright doğrulamasını etkinleştirin. Open Design bunları özenle seçilmiş bir kütüphane olarak sunar, böylece proje başına kurulumu atlarsınız."}, {"name": "Open Design, OpenAI ile bağlantılı mı?", "text": "Hayır. Codex, OpenAI'nin bir ürünüdür; Open Design, onu birinci taraf bir adaptör olarak destekleyen bağımsız bir açık kaynaklı projedir. OpenAI ve Codex, OpenAI'nin ticari markalarıdır."}, {"name": "Dosyalarım ve kimlik bilgilerim güvende mi?", "text": "Evet — Open Design yerel önceliklidir. Dosyalarınız, artefaktlarınız ve DESIGN.md'niz kendi reponuzda kalır ve OpenAI kimlik bilgileriniz doğrudan ajanınız tarafından kullanılır, asla Open Design sunucuları üzerinden yönlendirilmez."}], "ctaTitle": "Codex ile açık yolla tasarlayın.", "ctaBody": "Kendi OpenAI anahtarınızı getirin, her dosyayı yerel tutun ve zaten kullandığınız ajanın etrafında özenle seçilmiş bir tasarım kütüphanesi edinin.", "ctaActions": [{"label": "Codex'i Open Design içinde kullanın", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub'da yıldız verin", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Masaüstü uygulamasını indirin", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Desteklenen tüm ajanları görün"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Tasarımcılar için Cursor — Open Design", + description: "Tasarımcılar Cursor'ı UI ve web tasarımı için nasıl kullanır — Design Mode, Figma'dan koda, Figma MCP — ve Open Design Cursor'ı nasıl yerel öncelikli, açık kaynaklı bir tasarım ajanına dönüştürür.", + breadcrumb: "Cursor", + label: "Ajan · Cursor", + heading: "Tasarımcılar için Cursor.", + lead: "Cursor, artık görsel bir Design Mode'a sahip AI kod editörüdür. Tasarımcılar onu işaret ve çizim yoluyla UI düzenlemek ve Figma'yı koda dönüştürmek için kullanır. Open Design, Cursor Agent'ı dosyalarınızı yerel tutan açık kaynaklı bir tasarım iş akışına bağlar.", + rich: {"heroCtaLead": "Open Design, Cursor'ı yerel öncelikli, açık kaynaklı bir tasarım ajanına dönüştürür — Cursor hesabınız veya model anahtarlarınız, dosyalarınız ve etrafında özenle seçilmiş bir skill ve tasarım sistemi kütüphanesi.", "heroCtaActions": [{"label": "Cursor'ı Open Design içinde kullanın", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub'da yıldız verin", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Masaüstü uygulamasını indirin", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor, “oluştur ve işlenmesini izle” yaklaşımını UI'ı yayınlamanın varsayılan yolu haline getiren AI öncelikli kod editörüdür. Agent modu, satır içi düzenlemeler, editör içi bir önizleme ve MCP üzerinden Figma ile — ona doğru referansları, kuralları ve bir doğrulama döngüsü verdiğinizde — gerçek bir tasarım aracı haline geldi. Bu, Cursor'ı UI, frontend ve tasarım sistemi çalışmaları için kullanmaya ve onu Open Design ile yapılandırılmış bir tasarım iş akışına bağlamaya dair pratik, uçtan uca bir rehberdir.", "Cursor'ın gerçekte ne olduğunu, sıkı yinele-ve-izle döngüsünün tasarım için neden iyi olduğunu, sıfırdan nasıl kurulacağını, ekran görüntüsünden ve önizlemeden UI'a döngüyü, MCP üzerinden Figma gidiş-dönüşünü, Codex ve Claude Code ile nasıl karşılaştırıldığını, AI çıktısını jenerik gösteren tuzakları ve Open Design'ın açık, yerel öncelikli bir tasarım katmanı olarak bu boşluğu nasıl kapattığını ele alır."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Cursor tasarım yakınsaması: solda editör, ortada merkezinde Cursor işaretiyle özenle seçilmiş bir skill ve tasarım sistemi merkezi ve sağda işlenmiş bir UI", "caption": "Çekirdek fikir: Cursor, editörde UI'ı düzenler ve işler, bu sırada özenle seçilmiş bir tasarım merkezi ona çıktıyı bilinçli gösteren sistemi, skill'leri ve referansları besler."}, "tocLabel": "Bu sayfada", "toc": [{"id": "what-is-cursor", "label": "Cursor gerçekte nedir"}, {"id": "why-design", "label": "Cursor tasarımda neden iyi"}, {"id": "setup", "label": "Cursor'ı tasarım için kurun (sıfırdan)"}, {"id": "preview-workflow", "label": "Önizlemeden UI'a iş akışı"}, {"id": "figma", "label": "MCP üzerinden Cursor + Figma"}, {"id": "vs", "label": "Cursor, Codex ve Claude Code karşılaştırması"}, {"id": "pitfalls", "label": "Tuzaklar ve “AI çöplüğü” görünümü"}, {"id": "open-design", "label": "Open Design içinde Cursor ile tasarım"}, {"id": "faq", "label": "SSS"}], "sections": [{"id": "what-is-cursor", "heading": "Cursor gerçekte nedir", "blocks": [{"kind": "p", "text": "Cursor, Anysphere tarafından geliştirilen AI öncelikli bir kod editörüdür. VS Code'un bir fork'udur, bu yüzden tanıdık editörü, eklentileri ve kısayol tuşlarını korur, ancak iş akışını; tüm projenizi okuyabilen, birden çok dosyayı düzenleyebilen, komutları çalıştırabilen ve sizinle döngü içinde yineleyebilen bir AI ajanı etrafında yeniden inşa eder."}, {"kind": "p", "text": "Tasarım çalışması için önemli yüzeyler şunlardır: Agent modu (bir sonuç tarif edersiniz ve Cursor dosyalar boyunca planlar ve düzenler), hızlı ince ayarlar için satır içi düzenlemeler ve Tab tamamlamaları, pencereyi terk etmeden çalışan UI'ı görebilmeniz için editör içi bir önizleme / tarayıcı ve canlı bir Figma dosyası gibi harici bağlamı çekmesine izin veren MCP desteği."}, {"kind": "steps", "items": [{"label": "Proje kuralları", "body": "Cursor, proje talimat dosyalarını okur — `.cursor/rules` altındaki sürümlenmiş `.mdc` kuralları ve sade bir `AGENTS.md` — böylece tasarım kurallarınızı ajanın her çalıştırmada okuduğu yere kodlayabilirsiniz."}, {"label": "Modeller", "body": "Cursor model açısından esnektir: aboneliğiniz üzerinden öncü modellerle gelir ve ayrıca kendi model anahtarlarınızı getirmeyi destekler, böylece aynı editör iş akışının arkasındaki motoru siz seçersiniz."}, {"label": "MCP", "body": "Model Context Protocol konuşur, böylece harici sunucular — en alakalısı Figma MCP sunucusu — ajan için birinci sınıf bağlam haline gelir."}]}, {"kind": "ul", "items": ["Sağlayıcı: Anysphere", "Kimlik bilgisi: Cursor hesabı / aboneliği (Hobby / Pro / Business) veya kendi model anahtarlarınız (BYOK)", "Biçim: Editör içi bir ajan ve önizlemeye sahip AI öncelikli kod editörü (VS Code fork'u)"]}]}, {"id": "why-design", "heading": "Cursor tasarımda neden iyi", "blocks": [{"kind": "p", "text": "Cursor'ın tasarım üstünlüğü tek bir özellik değildir — oluştur-ve-gör döngüsünün sıkılığıdır. Üç şey onu jenerik bir kod üreticisi yerine bir tasarım aracı gibi hissettirir."}, {"kind": "steps", "items": [{"label": "Sıkı bir yinele-ve-izle döngüsü", "body": "Komut verirsiniz, Cursor dosyalar boyunca düzenler ve editör içi önizleme sonucu hemen işler — böylece boşluğu, hiyerarşiyi ve hareketi ayrı bir terminal ve tarayıcı arasında gidip gelmek yerine saniyeler içinde ayarlarsınız."}, {"label": "Doğrudan görsel düzenleme", "body": "Sohbetin ötesinde, Cursor önizlemede öğeleri seçmenize ve stilleri ince ayar yapmanıza izin verir, böylece küçük görsel düzeltmeler kod arkeolojisi yerine tasarım düzenlemeleri gibi hissettirir."}, {"label": "Proje kuralları ve MCP bağlamı", "body": "`.cursor/rules` (veya `AGENTS.md`) ve Figma MCP sunucusu ile ajan, tahmin yürütmek yerine token'larınıza, bileşenlerinize ve gerçek tasarım spesifikasyonlarınıza karşı çalışır."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Tasarım sistemi, skill ve referans görselin iyi tasarım çıktısına yakınsadığını gösteren diyagram", "caption": "Zevk, sağladığınız üç girdiden gelir: bir tasarım sistemi, bir skill ve gerçek referans görseller."}, {"kind": "p", "text": "Çıkarılan ders, her ajanın öğrettiğiyle aynıdır: Cursor varsayılan olarak zevke sahip değildir. Ona kısıtlar verdiğinizde iyi tasarım üretir — bir tasarım sistemi, estetik bir skill ve somut referanslar. Open Design tam olarak bu girdileri paketler; ikisinin neden birbirine uyduğunun nedeni de budur (daha fazlası aşağıda)."}]}, {"id": "setup", "heading": "Cursor'ı tasarım çalışması için sıfırdan kurun", "blocks": [{"kind": "p", "text": "Temiz bir makineden; tasarım sisteminize karşı UI oluşturabilen, önizleyebilen ve doğrulayabilen bir Cursor'a giden tam yol şudur."}, {"kind": "ol", "items": ["Cursor'ı cursor.com'dan kurun ve Cursor hesabınızla oturum açın veya Ayarlar'da kendi model anahtarlarınızı (BYOK) yapılandırın.", "Projenizi açın ve sohbet / Agent panelinde bir model seçin.", "Proje kuralları ekleyin: yapılandırılmış, glob kapsamlı kurallar için `.cursor/rules/*.mdc` oluşturun veya basit, okunabilir talimatlar için sade bir `AGENTS.md` oluşturun.", "Figma MCP sunucusunu bağlayın (isteğe bağlı), böylece ajan canlı tasarım bağlamını okuyabilir.", "Dev sunucunuzu çalıştırın ve yinelerken UI'ı görmek ve doğrulamak için editör içi önizlemeyi kullanın."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Beş adımlı kurulum akışı: kur, kimlik doğrula, kuralları yapılandır, skill ekle, doğrula", "caption": "Kurulum sırası: kur → kimlik doğrula → proje kurallarını yapılandır → bir skill ekle → önizleme doğrulamasını etkinleştir."}, {"kind": "p", "text": "Minimal bir proje kuralları dosyası, ajanın jenerik bir görünüme dönmek yerine bir markaya göre tasarlamasını sağlar. Onu Cursor'ın her çalıştırmada okuduğu yere koyun:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Tasarım kurallarınızı kodlayın", "body": "Token'larınızı, ilkellerinizi ve kurallarınızı `.cursor/rules` veya `AGENTS.md` içine koyun ve Cursor'ı bunlara yönlendirin; böylece çıktı jenerik bir görünüme dönmek yerine bir markayla eşleşsin."}, {"label": "Komutları küçük tutun", "body": "Cursor'ın sıkı döngüsü odaklı isteklere ödül verir — bir seferde bir bileşen veya durum üzerinde yineleyin ve geçişler arasında önizlemeyi izleyin."}]}]}, {"id": "preview-workflow", "heading": "Önizlemeden UI'a iş akışı", "blocks": [{"kind": "p", "text": "Cursor ile en yüksek kaldıraçlı tasarım döngüsü, bir referansı çalışan, duyarlı bir UI'a dönüştürmek ve eşleşene kadar editörde yinelemektir — tahmin yürütmek yerine canlı önizlemeyi sürekli izleyerek."}, {"kind": "ol", "items": ["Sahip olduğunuz en net görsel referanslardan başlayın — ve yalnızca tek bir hero görseli değil, birden çok durumu (masaüstü ve mobil, hover, boş, yükleniyor) dahil edin.", "Komutta spesifik olun; belirsiz komutlar jenerik UI üretir.", "Bir tasarım sistemi hazırlayın ve Cursor'a token'ların ve kanonik ilkellerin nerede yaşadığını söyleyin.", "Editör içi önizlemeyi açık ve dev sunucunuzu çalışır tutun, böylece her düzenleme önemsediğiniz kırılma noktalarında hemen işlensin.", "İşlenmiş UI'ı referanslarla karşılaştırarak yineleyin — ve küçük görsel düzeltmeler için önizlemede doğrudan öğe seçimini kullanın."]}, {"kind": "p", "text": "Sohbete bir görsel ekleyerek referansları besleyin, ardından somut kısıtlarla komut verin:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "İyi yinelemeleri commit edin ve kötü olanları geri alın (geri aldığınızda Cursor'a söyleyin), böylece her geçiş temiz bir temel üzerine inşa edilsin — herhangi bir ajan döngüsünün sapmasını önleyen aynı disiplin."}]}, {"id": "figma", "heading": "Cursor + Figma: MCP üzerinden tasarım ↔ kod", "blocks": [{"kind": "p", "text": "Cursor, resmi Figma MCP sunucusu aracılığıyla Figma'ya bağlanır; bu da ajana düz bir ekran görüntüsü yerine canlı bir Figma dosyasına yapılandırılmış erişim sağlar. Bu, devirden tahmin yürütmeyi ortadan kaldırır."}, {"kind": "steps", "items": [{"label": "Tasarım → Kod", "body": "Figma'da bir frame'in bağlantısını kopyalayın, onu Cursor'a yapıştırın ve ondan tasarımı uygulamasını isteyin. MCP sunucusu gerçek tasarım bağlamını — bileşenler, değişkenler, düzen verisi, token'lar — açığa çıkarır, böylece üretilen kod kaynağa yaklaşmak yerine onunla eşleşir."}, {"label": "Hizalı kalın", "body": "Figma'da tutarlı kullanılan tasarım token'ları, stiller ve bileşenlerle (ve mevcut olduğunda Code Connect ile), Cursor'ın çıktısı ilkelleri yeniden icat etmek yerine gerçek tasarım sisteminize eşlenmiş kalır."}]}, {"kind": "p", "text": "Uzak Figma MCP sunucusunu bir kez kurun, Cursor için birinci sınıf bağlam olarak kullanılabilir olsun. MCP açık bir standart olduğundan, aynı sunucu Cursor, Claude Code, Codex ve VS Code arasında yeniden kullanılabilir — tam olarak Open Design'ın düzenlemek için inşa edildiği türden taşınabilir, çok ajanlı bir yetenek."}]}, {"id": "vs", "heading": "Tasarım için Cursor, Codex ve Claude Code", "blocks": [{"kind": "p", "text": "Tasarım çalışması için tek bir kazanan yoktur — her ajanın farklı bir gücü vardır ve deneyimli ekipler bunları üst üste yığar. Adil bir özet:"}, {"kind": "table", "columns": ["Ajan", "Tasarım gücü", "En iyi olduğu alan"], "rows": [["Cursor", "Canlı editör içi önizleme ve doğrudan öğe düzenlemeyle görsel oluştur-ve-gör döngüsü", "Bir IDE içinde sıkı yinele-ve-izle UI çalışması"], ["Codex", "Bir frontend skill'i ile güçlü görsel cila; görsel anlama ve sandbox'lanmış çalıştırmalar", "Devredilen asenkron derlemeler ve taşınabilir AGENTS.md kuralları"], ["Claude Code", "Spesifik tasarım kararları (hex, boşluk, tipografi) ve kod tabanının farkında UX", "Frontend akıl yürütmesi ve geniş bağlamlı yeniden düzenlemeler"]]}, {"kind": "p", "text": "Tekrarlanan topluluk kararı, zevkin insanlardan geldiğidir: üçü de skill'ler, referanslar ve kısıtlar olmadan jenerik bir estetiğe varsayılan olarak kayar. Çözülmesi gereken asıl sorun budur — ve bu sorun, model biçimli değil, tasarım aracı biçimlidir."}]}, {"id": "pitfalls", "heading": "Tuzaklar ve “AI çöplüğü” görünümünden nasıl kaçınılır", "blocks": [{"kind": "p", "text": "Cursor tarafından üretilen tasarımla ilgili en yaygın şikayet, jenerik görünmesidir — yumuşak degradeler, yüzen paneller, aşırı büyük yuvarlatılmış köşeler, dramatik gölgeler, “bunu bir AI yaptı diye bağıran” bir Inter-ve-mor havası. Bildirilen diğer sorunlar arasında mobilde bozulan düzenler ve UI metnine sızan talimatlar yer alır."}, {"kind": "steps", "items": [{"label": "Bir tasarım skill'i ekleyin", "body": "Özenle seçilmiş bir estetik skill, Cursor'ı varsayılan görünüm yerine gerçek bir yöne bağlanmaya zorlar."}, {"label": "Doğrulamak için önizlemeyi kullanın", "body": "Editör içi önizlemede kırılma noktaları boyunca işleyin ve kendi kendini kontrol edin, böylece düzenler mobilde sessizce bozulmasın."}, {"label": "Token ve referans sağlayın", "body": "Gerçek tasarım token'ları ve referans ekran görüntüleri, çıktı kalitesi üzerindeki en büyük tek kaldıraçtır."}, {"label": "Kuralları `.cursor/rules` içinde kodlayın", "body": "“hero kartı yok, en fazla iki yazı tipi, marka öncelikli hiyerarşi” gibi kuralları, ajanın her çalıştırmada okuduğu yere koyun."}]}, {"kind": "p", "text": "Her hafifletmenin, ajana özenle seçilmiş bir tasarım bağlamı vermekle ilgili olduğuna dikkat edin. Bu bağlamı proje başına elle sürdürmek, Open Design'ın ortadan kaldırdığı zahmettir."}]}, {"id": "open-design", "heading": "Open Design içinde Cursor ile tasarım", "blocks": [{"kind": "p", "text": "Open Design, yukarıdaki iş akışının sürekli istediği açık kaynaklı tasarım katmanıdır. Cursor'ı birinci taraf bir adaptör olarak ele alır ve onu özenle seçilmiş bir skill ve tasarım sistemi kütüphanesi, yapılandırılmış bir render hattı ve yerel bir masaüstü UI'sı ile sarmalar — böylece Cursor'ı iyi yapan tasarım bağlamı, her seferinde elle bir araya getirilmek yerine ilk çalıştırmadan itibaren oradadır."}, {"kind": "ol", "items": ["Open Design'ı kurun ve ajanınız olarak Cursor'ı seçin.", "Cursor hesabınız veya kendi model anahtarlarınızla (BYOK) kimlik doğrulayın — kimlik bilgileri makinenizde kalır ve asla bizim üzerimizden proxy'lenmez.", "Bir tasarım sistemi ve bir skill seçin, ardından tutarlı bir zevkle sunumlar, prototipler ve açılış sayfaları üretin.", "Her artefakt ve DESIGN.md dosyası, barındırılan bir bulutta değil, kendi reponuzda yaşar."]}, {"kind": "p", "text": "Aynı Cursor ajanı, aynı anahtar — artı etrafında gerçek, taşınabilir, açık kaynaklı bir tasarım iş akışı. Yerel öncelikli ve Apache-2.0'dır, bu yüzden çalışmanız veya kimlik bilgileriniz hakkında hiçbir şey makinenizden ayrılmaz."}]}], "faqTitle": "Sıkça sorulan sorular", "faq": [{"name": "Cursor gerçekten tasarım çalışması yapabilir mi?", "text": "Evet — bağlamda bir tasarım skill'i, bir tasarım sistemi ve gerçek referans görsellerle Cursor üretim kalitesinde, duyarlı UI üretir ve editör içi önizlemesi onu görsel olarak doğrulamanıza ve iyileştirmenize olanak tanır. Bu bağlam olmadan jenerik bir görünüme dönme eğilimindedir; Open Design'ın doldurduğu boşluk da budur."}, {"name": "Bu resmi bir Cursor ürünü mü?", "text": "Hayır. Open Design, Cursor'ı bir ajan olarak entegre eden bağımsız bir açık kaynaklı projedir. Cursor'ı yerel öncelikli, açık bir skill ve tasarım sistemi kütüphanesiyle tamamlar."}, {"name": "Cursor ile tasarım yapmak için bir Cursor aboneliğine ihtiyacım var mı?", "text": "Bir Cursor hesabı / aboneliği kullanabilir veya kendi model anahtarlarınızı (BYOK) getirebilirsiniz. Open Design her iki durumda da kimlik bilgilerinizi asla proxy'lemez — bunlar doğrudan ajanınız tarafından kullanılır."}, {"name": "Frontend tasarımı için Cursor mı yoksa Claude Code mu?", "text": "İkisi de güçlüdür. Claude Code, spesifik, kod tabanının farkında tasarım kararlarıyla bilinir; Cursor'ın üstünlüğü, editör içinde canlı bir önizlemeyle sıkı oluştur-ve-gör döngüsüdür. Birçok ekip ikisini de kullanır — Open Design, tasarım iş akışınızı değiştirmeden ajanlar arasında geçiş yapmanızı sağlar."}, {"name": "Cursor'ı Figma'ya nasıl bağlarım?", "text": "Cursor'a resmi Figma MCP sunucusunu ekleyin, ardından bir Figma frame bağlantısını sohbete yapıştırın ve Cursor'dan onu uygulamasını isteyin. Sunucu gerçek bileşenleri, değişkenleri ve düzen verisini açığa çıkarır, böylece üretilen kod kaynak tasarımla eşleşir."}, {"name": "Jenerik “AI çöplüğü” estetiğinden nasıl kaçınırım?", "text": "Bir tasarım skill'i ekleyin, gerçek tasarım token'ları ve referans ekran görüntüleri sağlayın, marka kurallarını `.cursor/rules` veya `AGENTS.md` içinde kodlayın ve önizlemede kırılma noktaları boyunca doğrulayın. Open Design bunları özenle seçilmiş bir kütüphane olarak sunar, böylece proje başına kurulumu atlarsınız."}, {"name": "Open Design, Cursor veya Anysphere ile bağlantılı mı?", "text": "Hayır. Cursor, Anysphere'in bir ürünüdür; Open Design, onu birinci taraf bir adaptör olarak destekleyen bağımsız bir açık kaynaklı projedir. Cursor ve Anysphere, Anysphere, Inc.'in ticari markalarıdır."}, {"name": "Dosyalarım ve kimlik bilgilerim güvende mi?", "text": "Evet — Open Design yerel önceliklidir. Dosyalarınız, artefaktlarınız ve DESIGN.md'niz kendi reponuzda kalır ve Cursor veya model kimlik bilgileriniz doğrudan ajanınız tarafından kullanılır, asla Open Design sunucuları üzerinden yönlendirilmez."}], "ctaTitle": "Cursor ile açık yolla tasarlayın.", "ctaBody": "Kendi Cursor hesabınızı veya model anahtarlarınızı getirin, her dosyayı yerel tutun ve zaten kullandığınız ajanın etrafında özenle seçilmiş bir tasarım kütüphanesi edinin.", "ctaActions": [{"label": "Cursor'ı Open Design içinde kullanın", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub'da yıldız verin", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Masaüstü uygulamasını indirin", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Desteklenen tüm ajanları görün"}, + }, + 'opencode': { + ...en['opencode']!, + title: "Tasarım için OpenCode — Open Design", + description: "İnsanlar OpenCode'u UI ve web tasarımı için nasıl kullanır — design.md dosyaları, UI/UX skill'leri, Figma MCP — ve Open Design OpenCode'u nasıl yerel öncelikli, açık kaynaklı bir tasarım ajanına dönüştürür.", + breadcrumb: "OpenCode", + label: "Ajan · OpenCode", + heading: "Tasarım için OpenCode.", + lead: "OpenCode, açık kaynaklı terminal AI kodlama ajanıdır. Tasarımcılar gerçek UI üretmek için ona tasarım skill'leri ve DESIGN.md dosyaları ekler. Open Design bunu yapılandırılmış, açık kaynaklı bir iş akışı haline getirir — sağlayıcı anahtarlarınızı getirin, her şeyi yerel tutun.", + rich: {"heroCtaLead": "Open Design, OpenCode'u yerel öncelikli, açık kaynaklı bir tasarım ajanına dönüştürür — kendi sağlayıcı anahtarınızla seçtiğiniz herhangi bir model, dosyalarınız ve etrafında özenle seçilmiş bir skill ve tasarım sistemi kütüphanesi.", "heroCtaActions": [{"label": "OpenCode'u Open Design içinde kullanın", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub'da yıldız verin", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Masaüstü uygulamasını indirin", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode, bilinçli olarak modelden bağımsız, açık kaynaklı, terminal öncelikli bir AI kodlama ajanıdır: kendi sağlayıcı anahtarınızı getirir ve aynı iş akışının arkasında istediğiniz herhangi bir modeli çalıştırırsınız. Bu açıklık onu tasarım çalışması için doğal bir temel haline getirir — ama her ajan gibi, yalnızca ona doğru referansları, skill'leri ve bir doğrulama döngüsü verdiğinizde iyi UI üretir. Bu, OpenCode'u UI, frontend ve tasarım sistemi çalışmaları için kullanmaya ve onu Open Design ile yapılandırılmış bir tasarım iş akışına bağlamaya dair pratik, uçtan uca bir rehberdir.", "OpenCode'un gerçekte ne olduğunu, modelden bağımsız, açık bir ajanın tasarım için neden iyi bir uyum olduğunu, sıfırdan nasıl kurulacağını, ekran görüntüsünden UI'a döngüyü, AGENTS.md ve MCP'nin onu nasıl genişlettiğini, Codex, Claude Code ve Cursor ile nasıl karşılaştırıldığını, AI çıktısını jenerik gösteren tuzakları ve Open Design'ın açık, yerel öncelikli bir tasarım katmanı olarak bu boşluğu nasıl kapattığını ele alır — doğal bir eşleşme, çünkü her iki proje de açık kaynaklı ve kendi makinenizde çalışır."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "OpenCode tasarım geri bildirim döngüsü: bir terminal TUI ajanı, UI'ı işleyen bir tarayıcı ve bir çalışma alanı, geri döngü oluşturan bir geri bildirim okuyla", "caption": "Çekirdek döngü: OpenCode terminalde UI oluşturur, bunu gerçek bir tarayıcıda işler ve doğrular, referanslarınıza karşı yineler — seçtiğiniz hangi model olursa olsun."}, "tocLabel": "Bu sayfada", "toc": [{"id": "what-is-opencode", "label": "OpenCode gerçekte nedir"}, {"id": "why-design", "label": "Açık, her-model ajanı tasarıma neden uyar"}, {"id": "setup", "label": "OpenCode'u tasarım için kurun (sıfırdan)"}, {"id": "screenshot-workflow", "label": "Ekran görüntüsünden UI'a iş akışı"}, {"id": "extend", "label": "AGENTS.md, MCP ve paylaşılabilir oturumlar"}, {"id": "vs", "label": "OpenCode, Codex, Claude Code ve Cursor karşılaştırması"}, {"id": "pitfalls", "label": "Tuzaklar ve “AI çöplüğü” görünümü"}, {"id": "open-design", "label": "Open Design içinde OpenCode ile tasarım"}, {"id": "faq", "label": "SSS"}], "sections": [{"id": "what-is-opencode", "heading": "OpenCode gerçekte nedir", "blocks": [{"kind": "p", "text": "OpenCode, SST'nin (Anomaly Innovations) arkasındaki ekip tarafından sürdürülen, terminal için inşa edilmiş açık kaynaklı bir AI kodlama ajanıdır. Reponuzu okur, komutları çalıştırır, dosyaları düzenler ve büyük bir dil modeliyle konuşur — ama sağlayıcıya bağlı ajanların aksine, kendi modelini sunmaz. Onu istediğiniz herhangi bir sağlayıcıya ve modele yönlendirir ve kendi anahtarınızı getirirsiniz."}, {"kind": "p", "text": "Aynı motorun üzerinde bir masaüstü uygulaması ve IDE eklentileriyle birlikte bir terminal UI'sı (TUI) olarak çalışır. Kaputun altında bir istemci/sunucu mimarisi kullanır, böylece işi yapan ajan, onu sürdüğünüz yüzeyden ayrıştırılmıştır. İki yerleşik ajan — build ve plan — Tab tuşuyla geçiş yapar."}, {"kind": "steps", "items": [{"label": "Modelden bağımsız", "body": "Modeller ve sağlayıcılar, açık bir katalog olan models.dev'den gelir. Bunları opencode.json içinde bir provider/model-id dizesiyle yapılandırır ve yüklenmesini istemediğiniz sağlayıcıları devre dışı bırakabilirsiniz — böylece aynı tasarım iş akışı Anthropic, OpenAI, Google, OpenRouter, yerel modeller ve daha fazlasında çalışır."}, {"label": "Talimat dosyası", "body": "OpenCode, proje kuralları için projenizdeki bir AGENTS.md dosyasını (araçlar arası standart, CLAUDE.md ile de uyumlu) okur — tasarım kurallarınızı kodlamak için doğal yer. Bir tane oluşturmak için /init çalıştırın."}, {"label": "Genişletilebilir", "body": "LSP entegrasyonunu, MCP sunucularını, temaları, kısayol tuşlarını ve özel komutları destekler, ayrıca işbirliği için paylaşılabilir oturum bağlantıları sunar."}]}, {"kind": "ul", "items": ["Sürdüren: SST / Anomaly Innovations (açık kaynaklı proje)", "Kimlik bilgisi: kendi model sağlayıcı API anahtar(lar)ınız — BYOK, sağlayıcı kilidi yok", "Lisans: MIT, açık kaynak"]}]}, {"id": "why-design", "heading": "Açık, her-model ajanı tasarım çalışmasına neden uyar", "blocks": [{"kind": "p", "text": "OpenCode'un, bir sağlayıcı ajanı gibi tek bir “tasarım modeli” yoktur — ve asıl mesele de budur. Modelden bağımsız ve açık olduğundan, aynı tasarım iş akışını şu anda frontend'de en iyi olan modelde çalıştırabilir, sonra değiştirebilir veya yerel bir modele geri dönebilirsiniz, hepsi kurulumunuzu değiştirmeden."}, {"kind": "p", "text": "Ama model seçimi tek başına zevk satın almaz. Her kodlama ajanı gibi, OpenCode da ona kısıtlar vermediğiniz sürece jenerik UI üretir. İyi tasarım çıktısı, sağladığınız üç girdiden gelir."}, {"kind": "steps", "items": [{"label": "Bir tasarım sistemi", "body": "Ajanın yeniden kullandığı gerçek token'lar, ilkeller ve kurallar, böylece çıktı jenerik bir görünüme dönmek yerine bir markayla eşleşir."}, {"label": "Estetik bir skill", "body": "Gerçek bir zevki dayatan özenle seçilmiş bir skill — ölçülü hareket, marka öncelikli hiyerarşi, en fazla iki yazı tipi ve bir vurgu rengi — ve ajanın oluşturmadan önce bir yöne bağlanmasını sağlar."}, {"label": "Somut referanslar", "body": "Gerçek referans görseller ve birden çok durum (masaüstü ve mobil, hover, boş, yükleniyor), tek bir hero görseli değil."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Tasarım sistemi, skill ve referans görselin iyi tasarım çıktısına yakınsadığını gösteren diyagram", "caption": "Zevk, sağladığınız üç girdiden gelir: bir tasarım sistemi, bir skill ve gerçek referans görseller — hangi modeli çalıştırdığınızdan bağımsız olarak."}, {"kind": "p", "text": "Ders: OpenCode size model özgürlüğü verir, ama zevk yine de özenle seçilmiş bir tasarım bağlamından gelir. Open Design tam olarak bu girdileri paketler; ikisinin neden birbirine uyduğunun nedeni de budur — her ikisi de açık kaynaklı ve yerel önceliklidir (daha fazlası aşağıda)."}]}, {"id": "setup", "heading": "OpenCode'u tasarım çalışması için sıfırdan kurun", "blocks": [{"kind": "p", "text": "Temiz bir makineden, UI oluşturabilen ve doğrulayabilen bir OpenCode'a giden tam yol şudur."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Beş adımlı kurulum akışı: kur, sağlayıcı anahtarınızla kimlik doğrula, AGENTS.md yapılandır, bir skill ekle, doğrula", "caption": "Kurulum sırası: kur → kimlik doğrula (sağlayıcı anahtarınız) → AGENTS.md yapılandır → bir skill ekle → gerçek bir tarayıcıda doğrula."}, {"kind": "steps", "items": [{"label": "Tasarım kurallarınızı kodlayın", "body": "Token'larınızı, ilkellerinizi ve kurallarınızı AGENTS.md (veya ondan referans verilen bir DESIGN.md) içine koyun, böylece çıktı jenerik bir görünüme dönmek yerine bir markayla eşleşsin. opencode.json içindeki instructions seçeneği, glob'lar aracılığıyla ek kural dosyalarına işaret edebilir."}, {"label": "Yetenekli bir model seçin", "body": "OpenCode modelden bağımsız olduğundan, tasarım geçişi için şu anda frontend'de en güçlü olan sağlayıcı/modeli seçin — ve iş akışınızın geri kalanını değişmeden bırakın."}]}]}, {"id": "screenshot-workflow", "heading": "Ekran görüntüsünden UI'a iş akışı", "blocks": [{"kind": "p", "text": "Herhangi bir ajanla en yüksek kaldıraçlı tasarım döngüsü, bir referans görseli çalışan, duyarlı bir UI'a dönüştürmek ve eşleşene kadar yinelemektir. Aynı beş adımlı biçim OpenCode'da da geçerlidir."}, {"kind": "ol", "items": ["Sahip olduğunuz en net görsel referanslardan başlayın — ve yalnızca tek bir hero görseli değil, birden çok durumu (masaüstü ve mobil, hover, boş, yükleniyor) dahil edin.", "Komutta spesifik olun; belirsiz komutlar jenerik UI üretir.", "Bir tasarım sistemi hazırlayın ve OpenCode'a token'ların ve kanonik ilkellerin nerede yaşadığını söyleyin (AGENTS.md içinde).", "Bir dev sunucusu çalıştırın ve ajanın gerçek bir tarayıcıda işlemesini sağlayın, sonucu kontrol etmek için kırılma noktalarına yeniden boyutlandırarak.", "OpenCode'un uygulamasını ekran görüntüleriyle karşılaştırmasını sağlayarak yineleyin — yalnızca derlendiğini onaylamasın."]}, {"kind": "p", "text": "TUI'da çalışma dizininizin bulanık bir aramasını yapmak için dosyalara @ ile referans verin, satır içi shell komutlarını başta bir ! ile çalıştırın ve eylemleri / komutlarıyla sürün. Ardından somut kısıtlarla komut verin:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Komutları küçük ve odaklı tutun, iyi yinelemeleri commit edin ve kötü olanları geri alın (geri aldığınızda OpenCode'a söyleyin), böylece her geçiş temiz bir temel üzerine inşa edilsin."}]}, {"id": "extend", "heading": "AGENTS.md, MCP ve paylaşılabilir oturumlar", "blocks": [{"kind": "p", "text": "Üç genişletme noktası, OpenCode'u sürekli tasarım çalışması için pratik kılar ve üçü de açık bir tasarım iş akışına temizce eşlenir."}, {"kind": "steps", "items": [{"label": "AGENTS.md kuralları", "body": "Proje kuralları, repo kökündeki bir AGENTS.md içinde yaşar (veya ~/.config/opencode/AGENTS.md içindeki global kurallar). Her çalıştırmada okunan, tasarım kurallarınız için kalıcı evdir ve diğer ajanların kullandığı CLAUDE.md dosyalarıyla uyumludur."}, {"label": "MCP sunucuları", "body": "OpenCode, mcp anahtarı altında yapılandırılan hem yerel (command) hem de uzak (URL) MCP sunucularını destekler — yalnızca OpenCode'da değil, ajanlar arasında çalışan tasarım bağlamı ve harici araçları getirmenin taşınabilir yolu."}, {"label": "Paylaşılabilir oturumlar", "body": "/share komutu, işbirliği veya inceleme için bir konuşmaya genel bir bağlantı oluşturur ve /unshare onu iptal eder — bir tasarım geçişi üzerine geri bildirim almak için kullanışlıdır."}]}, {"kind": "p", "text": "Bunlar taşınabilir, çok ajanlı yeteneklerdir — tam olarak Open Design'ın, her proje başına yeniden oluşturmak yerine düzenlemek için inşa edildiği türden şeyler."}]}, {"id": "vs", "heading": "Tasarım için OpenCode, Codex, Claude Code ve Cursor", "blocks": [{"kind": "p", "text": "Tasarım çalışması için tek bir kazanan yoktur — her ajanın farklı bir gücü vardır ve deneyimli ekipler bunları üst üste yığar. Adil bir özet:"}, {"kind": "table", "columns": ["Ajan", "Tasarım gücü", "En iyi olduğu alan"], "rows": [["OpenCode", "Açık kaynaklı ve modelden bağımsız; tek bir terminal iş akışının arkasında herhangi bir sağlayıcı çalıştırın", "BYOK özgürlüğü, model değiştirme, tamamen açık ve yerel öncelikli kurulumlar"], ["Codex", "Bir frontend skill'i ile güçlü görsel cila; görsel anlama", "Devredilen asenkron, sandbox'lanmış derlemeler, taşınabilir AGENTS.md kuralları"], ["Claude Code", "Spesifik tasarım kararları (hex, boşluk, tipografi) ve kod tabanının farkında UX", "Frontend akıl yürütmesi ve geniş bağlamlı yeniden düzenlemeler"], ["Cursor", "Canlı önizleme ve satır içi düzenlemelerle görsel oluştur-ve-gör döngüsü", "Bir IDE içinde sıkı yinele-ve-izle UI çalışması"]]}, {"kind": "p", "text": "Tekrarlanan topluluk kararı, zevkin insanlardan geldiğidir: hepsi skill'ler, referanslar ve kısıtlar olmadan jenerik bir estetiğe varsayılan olarak kayar. Çözülmesi gereken asıl sorun budur — ve bu sorun, model biçimli değil, tasarım aracı biçimlidir; OpenCode gibi açık bir ajanın açık bir tasarım katmanıyla bu kadar iyi eşleşmesinin nedeni de tam olarak budur."}]}, {"id": "pitfalls", "heading": "Tuzaklar ve “AI çöplüğü” görünümünden nasıl kaçınılır", "blocks": [{"kind": "p", "text": "AI tarafından üretilen tasarımla ilgili en yaygın şikayet, jenerik görünmesidir — yumuşak degradeler, yüzen paneller, aşırı büyük yuvarlatılmış köşeler, dramatik gölgeler, “bunu bir AI yaptı diye bağıran” bir Inter-ve-mor havası. Bildirilen diğer sorunlar arasında bozuk mobil düzenler ve UI metnine sızan talimatlar yer alır. Bunların hiçbiri OpenCode'a özgü değildir; herhangi bir ajan özenle seçilmiş bir tasarım bağlamı olmadan çalıştığında olan budur."}, {"kind": "steps", "items": [{"label": "Estetik bir skill ekleyin", "body": "Özenle seçilmiş bir tasarım skill'i, ajanı varsayılan görünüm yerine gerçek bir yöne bağlanmaya zorlar."}, {"label": "Gerçek bir tarayıcıda doğrulayın", "body": "Kırılma noktaları boyunca işleyin ve kendi kendini kontrol edin, böylece düzenler mobilde sessizce bozulmasın."}, {"label": "Token ve referans sağlayın", "body": "Gerçek tasarım token'ları ve referans ekran görüntüleri, çıktı kalitesi üzerindeki en büyük tek kaldıraçtır."}, {"label": "Kuralları AGENTS.md içinde kodlayın", "body": "“hero kartı yok, en fazla iki yazı tipi, marka öncelikli hiyerarşi” gibi kuralları, ajanın her çalıştırmada okuduğu yere koyun."}]}, {"kind": "p", "text": "Her hafifletmenin, hangi modeli çalıştırdığınızdan bağımsız olarak, ajana özenle seçilmiş bir tasarım bağlamı vermekle ilgili olduğuna dikkat edin. Bu bağlamı proje başına elle sürdürmek, Open Design'ın ortadan kaldırdığı zahmettir."}]}, {"id": "open-design", "heading": "Open Design içinde OpenCode ile tasarım", "blocks": [{"kind": "p", "text": "Open Design, yukarıdaki iş akışının sürekli istediği açık kaynaklı tasarım katmanıdır. OpenCode'u birinci taraf bir adaptör olarak ele alır ve onu özenle seçilmiş bir skill ve tasarım sistemi kütüphanesi, yapılandırılmış bir render hattı ve yerel bir masaüstü UI'sı ile sarmalar — böylece herhangi bir ajanı iyi yapan tasarım bağlamı, her seferinde elle bir araya getirilmek yerine ilk çalıştırmadan itibaren oradadır. Her iki proje de açık kaynaklı ve yerel önceliklidir, bu da eşleşmeyi doğal bir uyum haline getirir."}, {"kind": "ol", "items": ["Open Design'ı kurun ve ajanınız olarak OpenCode'u seçin.", "Kendi model sağlayıcı API anahtarınızla (BYOK) kimlik doğrulayın — kimlik bilgileri makinenizde kalır ve asla bizim üzerimizden proxy'lenmez.", "Herhangi bir sağlayıcı ve model seçin, artı bir tasarım sistemi ve bir skill, ardından tutarlı bir zevkle sunumlar, prototipler ve açılış sayfaları üretin.", "Her artefakt ve DESIGN.md dosyası, barındırılan bir bulutta değil, kendi reponuzda yaşar."]}, {"kind": "p", "text": "Aynı OpenCode ajanı, aynı model özgürlüğü — artı etrafında gerçek, taşınabilir, açık kaynaklı bir tasarım iş akışı. Yerel öncelikli ve Apache-2.0'dır, bu yüzden çalışmanız veya kimlik bilgileriniz hakkında hiçbir şey makinenizden ayrılmaz."}]}], "faqTitle": "Sıkça sorulan sorular", "faq": [{"name": "OpenCode gerçekten tasarım çalışması yapabilir mi?", "text": "Evet — bağlamda estetik bir skill, bir tasarım sistemi ve gerçek referans görsellerle OpenCode üretim kalitesinde, duyarlı UI üretir ve bunu bir tarayıcıda doğrulayabilir. Modelden bağımsız olduğundan, şu anda frontend'de en iyi olan hangi modelse onu çalıştırırsınız. Bu özenle seçilmiş bağlam olmadan jenerik bir görünüme dönme eğilimindedir; Open Design'ın doldurduğu boşluk da budur."}, {"name": "Tasarım için OpenCode ile hangi modeli kullanmalıyım?", "text": "Hangisini isterseniz — OpenCode, models.dev aracılığıyla sağlayıcıdan bağımsızdır, böylece Anthropic, OpenAI, Google, OpenRouter veya yerel modelleri aynı iş akışının arkasında çalıştırabilir ve istediğiniz zaman değiştirebilirsiniz. Tasarım çıktısının kalitesi, modelden çok daha fazla skill'inize, tasarım sisteminize ve referanslarınıza bağlıdır."}, {"name": "Open Design, OpenCode (SST) ekibi tarafından mı yapıldı?", "text": "Hayır. Open Design, OpenCode'u bir ajan olarak entegre eden bağımsız bir açık kaynaklı projedir. OpenCode'u yerel öncelikli, açık bir skill ve tasarım sistemi kütüphanesiyle tamamlar."}, {"name": "OpenCode ile tasarım yapmak için özel bir aboneliğe ihtiyacım var mı?", "text": "Hayır — OpenCode BYOK'tur. Kendi model sağlayıcı API anahtarınızı getirirsiniz ve Open Design kimlik bilgilerinizi asla proxy'lemez. Sağlayıcı kilidi yoktur."}, {"name": "Frontend tasarımı için OpenCode mu, Codex mi yoksa Claude Code mu?", "text": "Hepsi güçlüdür ve birçok ekip bunları üst üste yığar. OpenCode'un üstünlüğü tamamen açık kaynaklı ve modelden bağımsız olmasıdır; Codex devredilen, sandbox'lanmış derlemelerde öne çıkar; Claude Code spesifik, kod tabanının farkında tasarım kararlarıyla bilinir. Open Design, tasarım iş akışınızı değiştirmeden ajanlar arasında geçiş yapmanızı sağlar."}, {"name": "OpenCode'u tasarım bağlamı için nasıl genişletirim?", "text": "Kuralları AGENTS.md içinde kodlayın, taşınabilir araçlar ve tasarım bağlamı için mcp anahtarı altına MCP sunucuları ekleyin ve inceleme için paylaşılabilir oturumları kullanın. Open Design, özenle seçilmiş bir skill ve tasarım sistemi kütüphanesi sunar, böylece proje başına kurulumu atlarsınız."}, {"name": "Open Design, OpenCode veya SST ile bağlantılı mı?", "text": "Hayır. OpenCode, SST (Anomaly Innovations) tarafından sürdürülen açık kaynaklı bir projedir; Open Design, onu birinci taraf bir adaptör olarak destekleyen bağımsız bir açık kaynaklı projedir."}, {"name": "Dosyalarım ve kimlik bilgilerim güvende mi?", "text": "Evet — Open Design yerel önceliklidir. Dosyalarınız, artefaktlarınız ve DESIGN.md'niz kendi reponuzda kalır ve model sağlayıcı kimlik bilgileriniz doğrudan ajanınız tarafından kullanılır, asla Open Design sunucuları üzerinden yönlendirilmez."}], "ctaTitle": "OpenCode ile açık yolla tasarlayın.", "ctaBody": "Kendi model sağlayıcı anahtarınızı getirin, her dosyayı yerel tutun ve zaten kullandığınız açık ajanın etrafında özenle seçilmiş bir tasarım kütüphanesi edinin.", "ctaActions": [{"label": "OpenCode'u Open Design içinde kullanın", "href": "/quickstart/", "variant": "primary"}, {"label": "GitHub'da yıldız verin", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Masaüstü uygulamasını indirin", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Desteklenen tüm ajanları görün"}, + }, + }, + 'uk': { + 'claude-code': { + ...en['claude-code']!, + title: "Claude Code для дизайну — Open Design", + description: "Як дизайнери використовують Claude Code для UI та вебдизайну, і як Open Design перетворює його на справжнього дизайн-агента — local-first, BYOK, із кураторською бібліотекою skill-ів і дизайн-систем.", + breadcrumb: "Claude Code", + label: "Агент · Claude Code", + heading: "Claude Code для дизайну.", + lead: "Claude Code — це термінальний агент для кодування від Anthropic. Люди вже використовують його для створення UI, дизайн-систем і лендингів. Open Design вбудовує його в повноцінний дизайн-процес — підключіть свій ключ Anthropic або підписку Claude, тримайте кожен файл локально.", + rich: {"heroCtaLead": "Open Design перетворює Claude Code на local-first дизайн-агента з відкритим кодом — ваш ключ Anthropic або підписка Claude, ваші файли та кураторська бібліотека skill-ів і дизайн-систем навколо нього.", "heroCtaActions": [{"label": "Використати Claude Code в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставити зірку на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Завантажити десктопний застосунок", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Claude Code широко вважають агентом для кодування з найкращим смаком до фронтенду — він міркує про інтерфейси з незвичною точністю, називаючи конкретні значення hex, відступи й типографічні шкали, і рефакторить UI у великій кодовій базі, не втрачаючи нитки. Але «з коробки» він усе ще тяжіє до загального вигляду, доки ви не дасте йому дизайн-систему, skill-и та реальні референси. Це практичний наскрізний посібник з використання Claude Code для UI, фронтенду та роботи з дизайн-системами, а також з його вбудовування у структурований процес разом з Open Design.", "Тут розглядається, чим насправді є Claude Code, чому він сильний у фронтенді, як налаштувати його з нуля, робочий процес із CLAUDE.md і Skills, офіційний двосторонній обмін із Figma, як він порівнюється з Codex і Cursor, пастки, через які вивід ШІ виглядає загальним, і як Open Design закриває цю прогалину як відкритий local-first дизайн-шар."], "heroImage": {"src": "/agents/claude-code-design/claude-code-design-hero.webp", "alt": "Цикл зворотного зв'язку дизайну Claude Code: термінальний агент, що ухвалює конкретні дизайн-рішення, браузер, що рендерить UI, і робочий простір зі стрілкою зворотного зв'язку", "caption": "Основний цикл: Claude Code продумує конкретні UI-рішення в терміналі, рендерить і перевіряє їх у справжньому браузері та сходиться до ваших референсів."}, "tocLabel": "На цій сторінці", "toc": [{"id": "what-is-claude-code", "label": "Чим насправді є Claude Code"}, {"id": "why-design", "label": "Чому Claude Code добрий у дизайні"}, {"id": "setup", "label": "Налаштування Claude Code для дизайну (з нуля)"}, {"id": "skills-workflow", "label": "Робочий процес із CLAUDE.md і Skills"}, {"id": "figma", "label": "Двосторонній обмін Claude Code + Figma"}, {"id": "vs", "label": "Claude Code проти Codex проти Cursor"}, {"id": "pitfalls", "label": "Пастки та вигляд «AI slop»"}, {"id": "open-design", "label": "Дизайн із Claude Code в Open Design"}, {"id": "faq", "label": "Часті запитання"}], "sections": [{"id": "what-is-claude-code", "heading": "Чим насправді є Claude Code", "blocks": [{"kind": "p", "text": "Claude Code — це агентний інструмент кодування від Anthropic. Він читає вашу кодову базу, редагує файли, виконує команди й інтегрується з вашими інструментами розробки — планує, пише та перевіряє роботу за завданнями природною мовою, а не просто автодоповнює рядки."}, {"kind": "p", "text": "Він постачається на кількох поверхнях, що мають один і той самий рушій: термінальний CLI, розширення IDE для VS Code, Cursor і JetBrains, десктопний застосунок з візуальним переглядом diff та вебдосвід для тривалих завдань. Ваші файли CLAUDE.md, налаштування та сервери MCP переносяться між усіма ними."}, {"kind": "steps", "items": [{"label": "Файл інструкцій", "body": "Claude Code читає файл CLAUDE.md у корені проєкту на початку кожної сесії — природне місце, щоб закодувати ваші дизайн-конвенції, tokens і чеклісти рев'ю."}, {"label": "Skills", "body": "Agent Skills упаковують повторювані інструкції, скрипти та ресурси, які Claude завантажує за потреби, включно з офіційним Frontend Design skill від Anthropic для смаку."}, {"label": "План і субагенти", "body": "Він може планувати перед дією та породжувати субагентів, що працюють над різними частинами завдання паралельно, завдяки чому великі рефактори UI лишаються узгодженими."}]}, {"kind": "ul", "items": ["Постачальник: Anthropic", "Облікові дані: API-ключ Anthropic (BYOK, через Console) або підписка Claude (Pro / Max)", "Поверхні: термінальний CLI, розширення VS Code / Cursor / JetBrains, десктопний застосунок, веб"]}]}, {"id": "why-design", "heading": "Чому Claude Code добрий у дизайні", "blocks": [{"kind": "p", "text": "Серед агентів для кодування Claude Code має репутацію смакового у фронтенд-роботі. Це пояснюється кількома речами."}, {"kind": "steps", "items": [{"label": "Конкретні, а не розпливчасті рішення", "body": "Claude Code схильний обирати конкретні варіанти — точні значення hex, шкали відступів, типографічні градації та ієрархію компонентів — замість відмахування, і саме це відрізняє справжній інтерфейс від заглушки."}, {"label": "Міркування з урахуванням кодової бази", "body": "Маючи великий робочий контекст, він рефакторить UI одразу в багатьох файлах, повторно використовуючи ваші наявні компоненти й tokens замість того, щоб винаходити одноразові стилі."}, {"label": "Офіційний frontend skill", "body": "Anthropic постачає Frontend Design skill, який змушує Claude спершу написати дизайн-напрямок і свідомо уникати загальних системних шрифтів та передбачуваних фіолетових градієнтів."}]}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-taste-triangle.webp", "alt": "Схема, що показує, як дизайн-система, skill і референсне зображення сходяться в добрий дизайн-результат", "caption": "Смак з'являється з трьох вхідних даних, які надаєте ви: дизайн-системи, skill-а та реальних референсних зображень."}, {"kind": "p", "text": "Урок той самий, що його Anthropic робить про власні моделі: Claude не має смаку за замовчуванням — наданий сам собі, він сходиться до статистичного центру вебдизайну (Inter, фіолетові градієнти, м'які тіні). Він створює добрий дизайн, коли ви даєте йому обмеження. Open Design упаковує саме ці вхідні дані, тому ці двоє пасують одне одному (далі — детальніше)."}]}, {"id": "setup", "heading": "Налаштуйте Claude Code для дизайну, з нуля", "blocks": [{"kind": "p", "text": "Ось повний шлях від чистої машини до Claude Code, який може будувати й перевіряти UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official"}, {"kind": "image", "src": "/agents/claude-code-design/claude-code-design-setup-flow.webp", "alt": "Процес налаштування з п'яти кроків: встановлення, автентифікація, налаштування CLAUDE.md, додавання skill-а, перевірка", "caption": "Послідовність налаштування: встановлення → автентифікація → налаштування CLAUDE.md → додавання Frontend Design skill → увімкнення перевірки в браузері."}, {"kind": "steps", "items": [{"label": "Закодуйте свої дизайн-правила", "body": "Помістіть свої tokens, примітиви та конвенції в CLAUDE.md і вкажіть на них Claude, щоб вивід відповідав бренду, а не звертався до загального вигляду."}, {"label": "Додайте перевірку в браузері", "body": "Підключіть Playwright або Chrome MCP, щоб Claude рендерив у справжньому браузері та перевіряв свій вивід на різних брейкпойнтах, а не лише підтверджував, що збірка проходить."}]}]}, {"id": "skills-workflow", "heading": "Робочий процес із CLAUDE.md і Skills", "blocks": [{"kind": "p", "text": "Найрезультативніший дизайн-цикл із Claude Code — це подавати йому реальні референси разом із вашим дизайн-контекстом, а потім ітерувати, доки UI не збіжиться — при цьому CLAUDE.md і Skills несуть обмеження, тож вам не доводиться пояснювати їх заново в кожному промпті."}, {"kind": "ol", "items": ["Починайте з найчіткіших візуальних референсів, які у вас є, — і включайте кілька станів (десктоп і мобільний, hover, порожній, завантаження), а не лише один hero-кадр.", "Будьте конкретні в промпті; розпливчасті промпти дають загальний UI навіть із сильним агентом.", "Тримайте свою дизайн-систему й конвенції в CLAUDE.md і кажіть Claude, де живуть tokens і канонічні примітиви.", "Додайте Frontend Design skill, щоб Claude обрав реальний естетичний напрямок перед написанням коду.", "Підключіть перевірку в браузері, щоб Claude рендерив, змінював розмір під брейкпойнти й порівнював із референсами — а не лише підтверджував, що збірка проходить."]}, {"kind": "p", "text": "Перетягніть референсне зображення в сесію та задайте промпт із конкретними обмеженнями:"}, {"kind": "code", "lang": "bash", "code": "claude \"Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does.\""}, {"kind": "p", "text": "Запускайте dev-сервер поруч, тримайте промпти невеликими й сфокусованими та комітьте вдалі ітерації / відкочуйте невдалі (кажучи Claude, коли ви відкочуєте), щоб кожен прохід будувався на чистій основі. Використовуйте режим планування для більших рефакторів, щоб переглянути підхід до будь-яких змін у файлах."}]}, {"id": "figma", "heading": "Claude Code + Figma: двосторонній обмін дизайн ↔ код", "blocks": [{"kind": "p", "text": "У лютому 2026 року Anthropic і Figma випустили першокласну двонапрямлену інтеграцію через сервер Figma MCP. Вона працює в обидва боки."}, {"kind": "steps", "items": [{"label": "Дизайн → Код", "body": "Виберіть фрейм у Figma або вставте посилання в Claude Code, підтягніть дизайн-контекст і попросіть реалізувати дизайн із вашою наявною бібліотекою компонентів. Code Connect тримає вивід узгодженим із вашими реальними компонентами."}, {"label": "Код → Дизайн", "body": "Зберіть і перегляньте функцію в браузері, а потім скажіть «Send this to Figma», щоб зафіксувати робочий UI як редаговані шари Figma — увесь екран або вибраний елемент."}]}, {"kind": "p", "text": "Встановіть її одного разу за допомогою claude plugin install figma@claude-plugins-official (Dev Mode MCP вимагає платного плану Figma). Той самий Figma MCP доступний для Claude Code, Codex, Cursor і VS Code — саме той тип переносної, мультиагентної можливості, яку Open Design створено оркеструвати."}]}, {"id": "vs", "heading": "Claude Code проти Codex проти Cursor для дизайну", "blocks": [{"kind": "p", "text": "Єдиного переможця для дизайн-роботи немає — у кожного агента своя сильна сторона, і досвідчені команди поєднують їх. Чесне резюме:"}, {"kind": "table", "columns": ["Агент", "Сила в дизайні", "Найкраще для"], "rows": [["Claude Code", "Конкретні дизайн-рішення (hex, відступи, типографіка) та UX-міркування з урахуванням кодової бази", "Фронтенд-міркування й рефактори з великим контекстом"], ["Codex", "Сильне візуальне опрацювання й розуміння зображень; асинхронні збірки в пісочниці", "Делеговані асинхронні збірки та переносні правила AGENTS.md"], ["Cursor", "Цикл «зроби й подивись» із живим попереднім переглядом та інлайн-правками", "Щільна робота над UI у режимі «ітеруй і спостерігай» усередині IDE"]]}, {"kind": "p", "text": "Сталий вердикт спільноти такий: смак походить від людей — усі три за замовчуванням тяжіють до загальної естетики без skill-ів, референсів і обмежень. Це і є справжня проблема, яку треба розв'язати — і вона має форму дизайн-інструмента, а не моделі."}]}, {"id": "pitfalls", "heading": "Пастки та як уникнути вигляду «AI slop»", "blocks": [{"kind": "p", "text": "Навіть із репутацією Claude Code за смак найпоширеніша скарга на дизайн, згенерований ШІ, — що він виглядає загальним: шрифти Inter, фіолетові градієнти на білому, м'які тіні, завеликі заокруглені кути, естетика, яка «кричить, що це зробив ШІ». Сама Anthropic пояснює це збіжністю розподілу: безпечні рішення домінують у тренувальних даних вебу. Серед інших повідомлених проблем — поламані мобільні розкладки та інструкції, що протікають у текст UI."}, {"kind": "steps", "items": [{"label": "Встановіть Frontend Design skill", "body": "Він змушує Claude обрати реальний напрямок і явно уникає шрифтів та градієнтів, надмірно вживаних ШІ."}, {"label": "Увімкніть перевірку в браузері", "body": "Змусьте Claude рендерити й самоперевірятися на різних брейкпойнтах, щоб розкладки не ламались на мобільному непомітно."}, {"label": "Надайте tokens і референси", "body": "Реальні дизайн-tokens і референсні скриншоти — найпотужніший важіль якості виводу."}, {"label": "Закодуйте правила в CLAUDE.md", "body": "Помістіть правила штибу «без hero-карток, максимум два шрифти, ієрархія за брендом» туди, де агент читає їх щоразу."}]}, {"kind": "p", "text": "Зверніть увагу: кожен спосіб пом'якшення зводиться до надання агенту кураторського дизайн-контексту. Підтримувати цей контекст вручну для кожного проєкту — це рутина, яку усуває Open Design."}]}, {"id": "open-design", "heading": "Дизайн із Claude Code всередині Open Design", "blocks": [{"kind": "p", "text": "Open Design — це той дизайн-шар з відкритим кодом, якого постійно потребує наведений вище процес. Він трактує Claude Code як власний адаптер і обгортає його кураторською бібліотекою skill-ів і дизайн-систем, структурованим конвеєром рендерингу та локальним десктопним UI — щоб дизайн-контекст, який робить Claude Code добрим, був на місці з першого запуску, а не збирався вручну щоразу."}, {"kind": "ol", "items": ["Встановіть Open Design і виберіть Claude Code як свого агента.", "Автентифікуйтеся своїм API-ключем Anthropic (BYOK) або підпискою Claude — облікові дані залишаються на вашій машині й ніколи не проксіюються через нас.", "Виберіть дизайн-систему та skill, а потім генеруйте презентації, прототипи й лендинги з послідовним смаком.", "Кожен артефакт і файл DESIGN.md живе у вашому власному репозиторії, а не в розміщеній хмарі."]}, {"kind": "p", "text": "Той самий агент Claude Code, той самий ключ — плюс реальний, переносний дизайн-процес з відкритим кодом навколо нього. Він local-first і Apache-2.0, тож ніщо у вашій роботі чи облікових даних не залишає вашу машину."}]}], "faqTitle": "Часті запитання", "faq": [{"name": "Чи добрий Claude Code для дизайн-роботи?", "text": "Так — його широко вважають агентом для кодування з найкращим смаком до фронтенду, що ухвалює конкретні рішення з урахуванням кодової бази щодо значень hex, відступів і типографічних шкал. Зі skill-ом Frontend Design, дизайн-системою та реальними референсними зображеннями в контексті він створює UI продакшн-якості, адаптивний, і може перевірити його в браузері. Без цього контексту він тяжіє до загального вигляду — і саме цю прогалину закриває Open Design."}, {"name": "Чи потрібна мені підписка Claude, щоб проєктувати з Claude Code?", "text": "Ви можете використовувати або API-ключ Anthropic (BYOK, через Console), або підписку Claude (Pro / Max). У будь-якому разі Open Design ніколи не проксіює ваші облікові дані — їх безпосередньо використовує ваш агент на вашій машині."}, {"name": "Claude Code чи Codex для фронтенд-дизайну?", "text": "Обидва сильні. Claude Code відомий конкретними дизайн-рішеннями з урахуванням кодової бази та фронтенд-міркуваннями; Codex має сильне візуальне опрацювання й чудово справляється з делегованими збірками в пісочниці. Багато команд використовують обидва — Open Design дозволяє перемикати агентів без зміни дизайн-процесу."}, {"name": "Як підключити Claude Code до Figma?", "text": "Встановіть офіційний плагін Figma командою claude plugin install figma@claude-plugins-official. Тоді ви зможете реалізовувати фрейми Figma в коді, використовуючи дизайн-контекст, і відправляти робочий UI назад у редаговані фрейми Figma за допомогою «Send this to Figma». Dev Mode MCP вимагає платного плану Figma."}, {"name": "Що таке Skills і CLAUDE.md?", "text": "CLAUDE.md — це markdown-файл у корені проєкту, який Claude Code читає на початку кожної сесії — місце, щоб закодувати ваші дизайн-конвенції. Skills упаковують повторювані інструкції та ресурси, які Claude завантажує за потреби, включно з офіційним Frontend Design skill від Anthropic. Open Design постачає кураторську бібліотеку обох, щоб ви пропустили налаштування для кожного проєкту."}, {"name": "Як уникнути загальної естетики «AI slop»?", "text": "Встановіть Frontend Design skill, надайте реальні дизайн-tokens і референсні скриншоти, закодуйте правила бренду в CLAUDE.md та увімкніть перевірку в браузері. Open Design постачає це як кураторську бібліотеку, щоб ви пропустили налаштування для кожного проєкту."}, {"name": "Чи пов'язаний Open Design з Anthropic?", "text": "Ні. Claude Code — продукт Anthropic; Open Design — незалежний проєкт з відкритим кодом, який підтримує його як власний адаптер. Claude і Claude Code — торгові марки Anthropic."}, {"name": "Чи мої файли й облікові дані в безпеці?", "text": "Так — Open Design local-first і Apache-2.0. Ваші файли, артефакти й DESIGN.md залишаються у вашому власному репозиторії, а ваші облікові дані Anthropic використовуються безпосередньо вашим агентом і ніколи не маршрутизуються через сервери Open Design."}], "ctaTitle": "Проєктуйте з Claude Code, відкрито.", "ctaBody": "Підключіть власний ключ Anthropic або підписку Claude, тримайте кожен файл локально й отримайте кураторську дизайн-бібліотеку навколо агента, яким ви вже користуєтесь.", "ctaActions": [{"label": "Використати Claude Code в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставити зірку на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Завантажити десктопний застосунок", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Переглянути всіх підтримуваних агентів"}, + }, + 'codex': { + ...en['codex']!, + title: "Codex для дизайну — Open Design", + description: "Як люди використовують OpenAI Codex для UI та вебдизайну — плагін Product Design, інтеграцію з Figma, фронтенд-skill-и — і як Open Design перетворює Codex на local-first дизайн-агента з відкритим кодом.", + breadcrumb: "Codex", + label: "Агент · Codex", + heading: "Codex для дизайну.", + lead: "Codex — це агент для кодування від OpenAI. Із плагіном Product Design та інтеграцією Figma він став серйозним дизайн-інструментом. Open Design вбудовує Codex у дизайн-процес з відкритим кодом — ваш ключ OpenAI або підписка ChatGPT, ваші файли, local-first.", + rich: {"heroCtaLead": "Open Design перетворює Codex на local-first дизайн-агента з відкритим кодом — ваш ключ OpenAI, ваші файли та кураторська бібліотека skill-ів і дизайн-систем навколо нього.", "heroCtaActions": [{"label": "Використати Codex в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставити зірку на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Завантажити десктопний застосунок", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenAI Codex починався як генератор коду, але у 2026 році став надійним інструментом для проєктування справжніх інтерфейсів — щойно ви даєте йому правильні референси, skill-и та цикл перевірки. Це практичний наскрізний посібник з використання Codex для UI, фронтенду та роботи з дизайн-системами, а також з його вбудовування в структурований дизайн-процес разом з Open Design.", "Тут розглядається, чим є Codex сьогодні, чому він раптом став добрим у фронтенді, як налаштувати його з нуля, цикл «скриншот → UI», офіційний двосторонній обмін із Figma, як він порівнюється з Cursor і Claude Code, пастки, через які вивід ШІ виглядає загальним, і як Open Design закриває цю прогалину як відкритий local-first дизайн-шар."], "heroImage": {"src": "/agents/codex-design/codex-design-workflow-loop.webp", "alt": "Цикл зворотного зв'язку дизайну Codex: термінальний агент, браузер, що рендерить UI, і робочий простір зі стрілкою зворотного зв'язку", "caption": "Основний цикл: Codex будує UI у терміналі, рендерить і перевіряє його у справжньому браузері та ітерує до ваших референсів."}, "tocLabel": "На цій сторінці", "toc": [{"id": "what-is-codex", "label": "Чим насправді є OpenAI Codex"}, {"id": "why-design", "label": "Чому Codex тепер добрий у дизайні"}, {"id": "setup", "label": "Налаштування Codex для дизайну (з нуля)"}, {"id": "screenshot-workflow", "label": "Робочий процес «скриншот → UI»"}, {"id": "figma", "label": "Двосторонній обмін Codex + Figma"}, {"id": "vs", "label": "Codex проти Cursor проти Claude Code"}, {"id": "pitfalls", "label": "Пастки та вигляд «AI slop»"}, {"id": "open-design", "label": "Дизайн із Codex в Open Design"}, {"id": "faq", "label": "Часті запитання"}], "sections": [{"id": "what-is-codex", "heading": "Чим насправді є OpenAI Codex (і чим він не є)", "blocks": [{"kind": "p", "text": "Спершу — уточнення, яке збиває з пантелику майже всіх, хто шукає «Codex». Початковий OpenAI Codex був моделлю автодоповнення коду 2021 року, що живила ранній GitHub Copilot і була виведена з експлуатації у 2023 році. Ця сторінка не про неї. Сьогоднішній Codex — це агентний інструмент кодування від OpenAI: він планує, пише, виконує й перевіряє код за завданнями природною мовою."}, {"kind": "p", "text": "Сучасний Codex постачається на чотирьох поверхнях: термінальний CLI (переписаний на Rust, під ліцензією Apache-2.0), розширення IDE для VS Code, Cursor і Windsurf, хмарний/вебдосвід для делегованих асинхронних завдань і десктопний застосунок із вбудованим браузером та Computer Use."}, {"kind": "steps", "items": [{"label": "Модель за замовчуванням", "body": "Станом на середину 2026 року рекомендована модель — gpt-5.5, а gpt-5.4 — це модель, яку OpenAI явно тренувала для фронтенду й роботи з комп'ютером."}, {"label": "Файл інструкцій", "body": "Codex читає файл AGENTS.md у вашому проєкті (міжінструментальний стандарт) для правил проєкту — природне місце, щоб закодувати ваші дизайн-конвенції."}, {"label": "Пісочниця", "body": "Він працює в пісочниці рівня ядра (workspace-write за замовчуванням), тож агент, що редагує ваш UI, не може вийти за межі проєкту."}]}, {"kind": "ul", "items": ["Постачальник: OpenAI", "Облікові дані: API-ключ OpenAI (BYOK) або підписка ChatGPT (Free / Go / Plus / Pro / Business / Enterprise)", "Ліцензія CLI: Apache-2.0, відкритий код"]}]}, {"id": "why-design", "heading": "Чому Codex тепер добрий у дизайні", "blocks": [{"kind": "p", "text": "На початку 2026 року зійшлися три речі, що зробили Codex справжнім дизайн-інструментом, а не загальним генератором коду."}, {"kind": "steps", "items": [{"label": "Модель, натренована для фронтенду", "body": "OpenAI випустила GPT-5.4 — свою першу основну модель, натреновану для фронтенду й роботи з комп'ютером, із набагато кращим розумінням зображень у дизайн-процесі та сильнішою самоперевіркою. Вона навіть може генерувати mood-борди та візуальні варіанти перед тим, як обрати фінальні ассети."}, {"label": "Офіційний frontend skill", "body": "Каталог openai/skills постачає кураторський frontend-skill, що нав'язує реальний смак: розкладки без карток, повноширинні hero-блоки, ієрархія за брендом, стриманий рух, щонайбільше два шрифти й один акцентний колір — і змушує Codex написати візуальну тезу перед побудовою."}, {"label": "Перевірка в браузері", "body": "Зі skill-ом Playwright Codex відкриває справжній браузер, змінює розмір під брейкпойнти й порівнює свій вивід із референсом, а не лише перевіряє, що збірка проходить."}]}, {"kind": "image", "src": "/agents/codex-design/codex-design-taste-triangle.webp", "alt": "Схема, що показує, як дизайн-система, skill і референсне зображення сходяться в добрий дизайн-результат", "caption": "Смак з'являється з трьох вхідних даних, які надаєте ви: дизайн-системи, skill-а та реальних референсних зображень."}, {"kind": "p", "text": "Урок за всіма трьома: Codex не має смаку за замовчуванням. Він створює добрий дизайн, коли ви даєте йому обмеження — дизайн-систему, естетичний skill і конкретні референси. Open Design упаковує саме ці вхідні дані, тому ці двоє пасують одне одному (далі — детальніше)."}]}, {"id": "setup", "heading": "Налаштуйте Codex для дизайну, з нуля", "blocks": [{"kind": "p", "text": "Ось повний шлях від чистої машини до Codex, який може будувати й перевіряти UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp"}, {"kind": "image", "src": "/agents/codex-design/codex-design-setup-flow.webp", "alt": "Процес налаштування з п'яти кроків: встановлення, автентифікація, налаштування, встановлення skill-а, перевірка", "caption": "Послідовність налаштування: встановлення → автентифікація → налаштування AGENTS.md → встановлення frontend skill → увімкнення перевірки в браузері."}, {"kind": "steps", "items": [{"label": "Закодуйте свої дизайн-правила", "body": "Помістіть свої tokens, примітиви та конвенції в AGENTS.md або DESIGN.md і вкажіть на них Codex, щоб вивід відповідав бренду, а не звертався до загального вигляду."}, {"label": "Виберіть правильний рівень міркування", "body": "OpenAI зазначає, що низький-середній рівні міркування часто дають сильніші фронтенд-результати, ніж найвище налаштування."}]}]}, {"id": "screenshot-workflow", "heading": "Робочий процес «скриншот → UI»", "blocks": [{"kind": "p", "text": "Найрезультативніший дизайн-цикл із Codex — перетворити референсне зображення на робочий, адаптивний UI та ітерувати, доки воно не збіжиться. Власні рекомендації OpenAI зводяться до п'яти кроків."}, {"kind": "ol", "items": ["Починайте з найчіткіших візуальних референсів, які у вас є, — і включайте кілька станів (десктоп і мобільний, hover, порожній, завантаження), а не лише один hero-кадр.", "Будьте конкретні в промпті; розпливчасті промпти дають загальний UI.", "Підготуйте дизайн-систему й скажіть Codex, де живуть tokens і канонічні примітиви.", "Увімкніть інтерактивний skill Playwright, щоб Codex рендерив у справжньому браузері й змінював розмір під брейкпойнти.", "Ітеруйте, змушуючи Codex порівнювати свою реалізацію зі скриншотами — а не лише підтверджувати, що збірка проходить."]}, {"kind": "p", "text": "Подавайте зображення, перетягуючи скриншот у термінал або через прапорець зображення, а потім задавайте промпт із конкретними обмеженнями:"}, {"kind": "code", "lang": "bash", "code": "codex -i reference-desktop.png -i reference-mobile.png \\\n \"Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does.\""}, {"kind": "p", "text": "Запускайте dev-сервер у другому терміналі, тримайте промпти невеликими й сфокусованими та комітьте вдалі ітерації / відкочуйте невдалі (кажучи Codex, коли ви відкочуєте), щоб кожен прохід будувався на чистій основі."}]}, {"id": "figma", "heading": "Codex + Figma: двосторонній обмін дизайн ↔ код", "blocks": [{"kind": "p", "text": "У лютому 2026 року OpenAI і Figma оголосили про офіційне партнерство, перетворивши попередню бета-версію Figma MCP на першокласну двонапрямлену інтеграцію. Вона працює в обидва боки."}, {"kind": "steps", "items": [{"label": "Дизайн → Код", "body": "Скопіюйте «link to selection» фрейму у Figma, вставте його в Codex із get_design_context і попросіть реалізувати дизайн із вашою наявною бібліотекою компонентів."}, {"label": "Код → Дизайн", "body": "Інструмент generate_figma_design («Code to Canvas») перетворює живий робочий UI назад на редаговані фрейми Figma — увесь екран, вибраний елемент або цілий файл."}]}, {"kind": "p", "text": "Figma MCP працює як віддалений сервер і звільнений від лімітів швидкості. Додайте його одного разу, і він стане доступним для Codex, Claude Code, Cursor, VS Code тощо — саме той тип переносної, мультиагентної можливості, яку Open Design створено оркеструвати."}]}, {"id": "vs", "heading": "Codex проти Cursor проти Claude Code для дизайну", "blocks": [{"kind": "p", "text": "Єдиного переможця для дизайн-роботи немає — у кожного агента своя сильна сторона, і досвідчені команди поєднують їх. Чесне резюме:"}, {"kind": "table", "columns": ["Агент", "Сила в дизайні", "Найкраще для"], "rows": [["Codex", "Сильне візуальне опрацювання після GPT-5.4 + frontend-skill; розуміння зображень", "Делеговані асинхронні збірки, запуски в пісочниці, переносні правила AGENTS.md"], ["Cursor", "Цикл «зроби й подивись» із живим попереднім переглядом та інлайн-правками", "Щільна робота над UI у режимі «ітеруй і спостерігай» усередині IDE"], ["Claude Code", "Конкретні дизайн-рішення (hex, відступи, типографіка) та UX з урахуванням кодової бази", "Фронтенд-міркування й рефактори з великим контекстом"]]}, {"kind": "p", "text": "Сталий вердикт спільноти такий: смак походить від людей — усі три за замовчуванням тяжіють до загальної естетики без skill-ів, референсів і обмежень. Це і є справжня проблема, яку треба розв'язати — і вона має форму дизайн-інструмента, а не моделі."}]}, {"id": "pitfalls", "heading": "Пастки та як уникнути вигляду «AI slop»", "blocks": [{"kind": "p", "text": "Найпоширеніша скарга на дизайн, згенерований Codex, — що він виглядає загальним: м'які градієнти, плаваючі панелі, завеликі заокруглені кути, драматичні тіні, вайб «Inter-і-фіолетовий», який «кричить, що це зробив ШІ». Серед інших повідомлених проблем — поламані мобільні розкладки, інструкції, що протікають у текст UI, та швидке досягнення лімітів використання."}, {"kind": "steps", "items": [{"label": "Встановіть frontend skill", "body": "Кураторський естетичний skill змушує Codex обрати реальний напрямок замість вигляду за замовчуванням."}, {"label": "Увімкніть перевірку Playwright", "body": "Змусьте Codex рендерити й самоперевірятися на різних брейкпойнтах, щоб розкладки не ламались на мобільному непомітно."}, {"label": "Надайте tokens і референси", "body": "Реальні дизайн-tokens і референсні скриншоти — найпотужніший важіль якості виводу."}, {"label": "Закодуйте правила в AGENTS.md", "body": "Помістіть правила штибу «без hero-карток, максимум два шрифти, ієрархія за брендом» туди, де агент читає їх щоразу."}]}, {"kind": "p", "text": "Зверніть увагу: кожен спосіб пом'якшення зводиться до надання агенту кураторського дизайн-контексту. Підтримувати цей контекст вручну для кожного проєкту — це рутина, яку усуває Open Design."}]}, {"id": "open-design", "heading": "Дизайн із Codex всередині Open Design", "blocks": [{"kind": "p", "text": "Open Design — це той дизайн-шар з відкритим кодом, якого постійно потребує наведений вище процес. Він трактує Codex як власний адаптер і обгортає його кураторською бібліотекою skill-ів і дизайн-систем, структурованим конвеєром рендерингу та локальним десктопним UI — щоб дизайн-контекст, який робить Codex добрим, був на місці з першого запуску, а не збирався вручну щоразу."}, {"kind": "ol", "items": ["Встановіть Open Design і виберіть Codex як свого агента.", "Автентифікуйтеся своїм API-ключем OpenAI (BYOK) або підпискою ChatGPT — облікові дані залишаються на вашій машині й ніколи не проксіюються через нас.", "Виберіть дизайн-систему та skill, а потім генеруйте презентації, прототипи й лендинги з послідовним смаком.", "Кожен артефакт і файл DESIGN.md живе у вашому власному репозиторії, а не в розміщеній хмарі."]}, {"kind": "p", "text": "Той самий агент Codex, той самий ключ — плюс реальний, переносний дизайн-процес з відкритим кодом навколо нього. Він local-first і Apache-2.0, тож ніщо у вашій роботі чи облікових даних не залишає вашу машину."}]}], "faqTitle": "Часті запитання", "faq": [{"name": "Чи справді OpenAI Codex може виконувати дизайн-роботу?", "text": "Так — із frontend skill, дизайн-системою та реальними референсними зображеннями в контексті Codex (особливо на GPT-5.4) створює UI продакшн-якості, адаптивний, і може перевірити його в браузері. Без цього контексту він тяжіє до загального вигляду — і саме цю прогалину закриває Open Design."}, {"name": "Це плагін OpenAI Codex Product Design?", "text": "Ні. Open Design — незалежний проєкт з відкритим кодом, який інтегрує Codex як агента. Він доповнює власний інструментарій OpenAI local-first відкритою бібліотекою skill-ів і дизайн-систем."}, {"name": "Чи потрібна мені підписка ChatGPT, щоб проєктувати з Codex?", "text": "Ви можете використовувати або API-ключ OpenAI (BYOK), або свою підписку ChatGPT. Вхід через ChatGPT зазвичай дає щедріші ліміти; у будь-якому разі Open Design ніколи не проксіює ваші облікові дані."}, {"name": "Codex чи Claude Code для фронтенд-дизайну?", "text": "Обидва сильні. Claude Code відомий конкретними дизайн-рішеннями з урахуванням кодової бази; Codex має сильне візуальне опрацювання після GPT-5.4 й чудово справляється з делегованими збірками в пісочниці. Багато команд використовують обидва — Open Design дозволяє перемикати агентів без зміни дизайн-процесу."}, {"name": "Як підключити Codex до Figma?", "text": "Додайте офіційний сервер Figma MCP (codex mcp add figma --url https://mcp.figma.com/mcp). Тоді ви зможете реалізовувати фрейми Figma в коді за допомогою get_design_context і відправляти робочий UI назад у редаговані фрейми Figma за допомогою generate_figma_design."}, {"name": "Як уникнути загальної естетики «AI slop»?", "text": "Встановіть frontend skill, надайте реальні дизайн-tokens і референсні скриншоти, закодуйте правила бренду в AGENTS.md та увімкніть перевірку Playwright. Open Design постачає це як кураторську бібліотеку, щоб ви пропустили налаштування для кожного проєкту."}, {"name": "Чи пов'язаний Open Design з OpenAI?", "text": "Ні. Codex — продукт OpenAI; Open Design — незалежний проєкт з відкритим кодом, який підтримує його як власний адаптер. OpenAI і Codex — торгові марки OpenAI."}, {"name": "Чи мої файли й облікові дані в безпеці?", "text": "Так — Open Design local-first. Ваші файли, артефакти й DESIGN.md залишаються у вашому власному репозиторії, а ваші облікові дані OpenAI використовуються безпосередньо вашим агентом і ніколи не маршрутизуються через сервери Open Design."}], "ctaTitle": "Проєктуйте з Codex, відкрито.", "ctaBody": "Підключіть власний ключ OpenAI, тримайте кожен файл локально й отримайте кураторську дизайн-бібліотеку навколо агента, яким ви вже користуєтесь.", "ctaActions": [{"label": "Використати Codex в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставити зірку на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Завантажити десктопний застосунок", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Переглянути всіх підтримуваних агентів"}, + }, + 'cursor': { + ...en['cursor']!, + title: "Cursor для дизайнерів — Open Design", + description: "Як дизайнери використовують Cursor для UI та вебдизайну — Design Mode, Figma-у-код, Figma MCP — і як Open Design перетворює Cursor на local-first дизайн-агента з відкритим кодом.", + breadcrumb: "Cursor", + label: "Агент · Cursor", + heading: "Cursor для дизайнерів.", + lead: "Cursor — це AI-редактор коду, тепер із візуальним Design Mode. Дизайнери використовують його, щоб редагувати UI вказуванням і малюванням, і перетворювати Figma на код. Open Design вбудовує Cursor Agent у дизайн-процес з відкритим кодом, що тримає ваші файли локально.", + rich: {"heroCtaLead": "Open Design перетворює Cursor на local-first дизайн-агента з відкритим кодом — ваш акаунт Cursor або ключі моделей, ваші файли та кураторська бібліотека skill-ів і дизайн-систем навколо нього.", "heroCtaActions": [{"label": "Використати Cursor в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставити зірку на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Завантажити десктопний застосунок", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["Cursor — це AI-first редактор коду, який зробив «зроби й подивись, як воно рендериться» стандартним способом випускати UI. З режимом Agent, інлайн-правками, попереднім переглядом усередині редактора та Figma через MCP він став справжнім дизайн-інструментом — щойно ви даєте йому правильні референси, правила та цикл перевірки. Це практичний наскрізний посібник з використання Cursor для UI, фронтенду та роботи з дизайн-системами, а також з його вбудовування в структурований дизайн-процес разом з Open Design.", "Тут розглядається, чим насправді є Cursor, чому його щільний цикл «ітеруй і спостерігай» добрий для дизайну, як налаштувати його з нуля, цикл «скриншот і попередній перегляд → UI», двосторонній обмін із Figma через MCP, як він порівнюється з Codex і Claude Code, пастки, через які вивід ШІ виглядає загальним, і як Open Design закриває цю прогалину як відкритий local-first дизайн-шар."], "heroImage": {"src": "/agents/cursor-design/cursor-design-hero.webp", "alt": "Збіжність дизайну Cursor: редактор ліворуч, кураторський хаб skill-ів і дизайн-систем посередині зі знаком Cursor у центрі та відрендерений UI праворуч", "caption": "Основна ідея: Cursor редагує й рендерить UI в редакторі, а кураторський дизайн-хаб подає йому систему, skill-и та референси, що роблять вивід умисним."}, "tocLabel": "На цій сторінці", "toc": [{"id": "what-is-cursor", "label": "Чим насправді є Cursor"}, {"id": "why-design", "label": "Чому Cursor добрий у дизайні"}, {"id": "setup", "label": "Налаштування Cursor для дизайну (з нуля)"}, {"id": "preview-workflow", "label": "Робочий процес «попередній перегляд → UI»"}, {"id": "figma", "label": "Cursor + Figma через MCP"}, {"id": "vs", "label": "Cursor проти Codex проти Claude Code"}, {"id": "pitfalls", "label": "Пастки та вигляд «AI slop»"}, {"id": "open-design", "label": "Дизайн із Cursor в Open Design"}, {"id": "faq", "label": "Часті запитання"}], "sections": [{"id": "what-is-cursor", "heading": "Чим насправді є Cursor", "blocks": [{"kind": "p", "text": "Cursor — це AI-first редактор коду, створений компанією Anysphere. Це форк VS Code, тож він зберігає звичний редактор, розширення та комбінації клавіш, але перебудовує робочий процес навколо AI-агента, який може читати весь ваш проєкт, редагувати кілька файлів, виконувати команди та ітерувати разом з вами в циклі."}, {"kind": "p", "text": "Для дизайн-роботи важливі поверхні — це режим Agent (ви описуєте результат, а Cursor планує й редагує між файлами), інлайн-правки та доповнення Tab для швидких налаштувань, попередній перегляд / браузер усередині редактора, щоб бачити робочий UI, не залишаючи вікно, і підтримка MCP, що дозволяє підтягувати зовнішній контекст, як-от живий файл Figma."}, {"kind": "steps", "items": [{"label": "Правила проєкту", "body": "Cursor читає файли інструкцій проєкту — версіоновані правила `.mdc` під `.cursor/rules` та звичайний `AGENTS.md` — тож ви можете закодувати свої дизайн-конвенції там, де агент читає їх щоразу."}, {"label": "Моделі", "body": "Cursor гнучкий до моделей: він постачається з передовими моделями через вашу підписку й також підтримує підключення власних ключів моделей, тож ви обираєте рушій за тим самим робочим процесом редактора."}, {"label": "MCP", "body": "Він розмовляє Model Context Protocol, тож зовнішні сервери — найрелевантніше, сервер Figma MCP — стають першокласним контекстом для агента."}]}, {"kind": "ul", "items": ["Постачальник: Anysphere", "Облікові дані: акаунт / підписка Cursor (Hobby / Pro / Business) або власні ключі моделей (BYOK)", "Форма: AI-first редактор коду (форк VS Code) з агентом і попереднім переглядом усередині редактора"]}]}, {"id": "why-design", "heading": "Чому Cursor добрий у дизайні", "blocks": [{"kind": "p", "text": "Дизайн-перевага Cursor — не окрема функція, а щільність циклу «зроби й подивись». Три речі роблять його схожим на дизайн-інструмент, а не на загальний генератор коду."}, {"kind": "steps", "items": [{"label": "Щільний цикл «ітеруй і спостерігай»", "body": "Ви задаєте промпт, Cursor редагує між файлами, а попередній перегляд усередині редактора рендерить результат миттєво — тож ви налаштовуєте відступи, ієрархію та рух за секунди замість того, щоб ходити кругом через окремий термінал і браузер."}, {"label": "Пряме візуальне редагування", "body": "Окрім чату, Cursor дозволяє вибирати елементи в попередньому перегляді й підправляти стилі, тож дрібні візуальні корекції відчуваються як дизайн-правки, а не археологія коду."}, {"label": "Правила проєкту та контекст MCP", "body": "З `.cursor/rules` (або `AGENTS.md`) і сервером Figma MCP агент працює з вашими tokens, компонентами та реальними дизайн-специфікаціями замість того, щоб вгадувати."}]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-taste-triangle.webp", "alt": "Схема, що показує, як дизайн-система, skill і референсне зображення сходяться в добрий дизайн-результат", "caption": "Смак з'являється з трьох вхідних даних, які надаєте ви: дизайн-системи, skill-а та реальних референсних зображень."}, {"kind": "p", "text": "Урок той самий, що його вчить кожен агент: Cursor не має смаку за замовчуванням. Він створює добрий дизайн, коли ви даєте йому обмеження — дизайн-систему, естетичний skill і конкретні референси. Open Design упаковує саме ці вхідні дані, тому ці двоє пасують одне одному (далі — детальніше)."}]}, {"id": "setup", "heading": "Налаштуйте Cursor для дизайну, з нуля", "blocks": [{"kind": "p", "text": "Ось повний шлях від чистої машини до Cursor, який може будувати, переглядати й перевіряти UI відносно вашої дизайн-системи."}, {"kind": "ol", "items": ["Встановіть Cursor із cursor.com і увійдіть зі своїм акаунтом Cursor або налаштуйте власні ключі моделей (BYOK) у Settings.", "Відкрийте свій проєкт і виберіть модель у панелі чату / Agent.", "Додайте правила проєкту: створіть `.cursor/rules/*.mdc` для структурованих, обмежених glob-ами конвенцій, або звичайний `AGENTS.md` для простих, читабельних інструкцій.", "Підключіть сервер Figma MCP (опційно), щоб агент міг читати живий дизайн-контекст.", "Запустіть свій dev-сервер і використовуйте попередній перегляд усередині редактора, щоб бачити й перевіряти UI під час ітерацій."]}, {"kind": "image", "src": "/agents/cursor-design/cursor-design-setup-flow.webp", "alt": "Процес налаштування з п'яти кроків: встановлення, автентифікація, налаштування правил, додавання skill-а, перевірка", "caption": "Послідовність налаштування: встановлення → автентифікація → налаштування правил проєкту → додавання skill-а → увімкнення перевірки через попередній перегляд."}, {"kind": "p", "text": "Мінімальний файл правил проєкту змушує агента проєктувати під бренд замість звертання до загального вигляду. Помістіть його туди, де Cursor читає його щоразу:"}, {"kind": "code", "lang": "markdown", "code": "# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing."}, {"kind": "steps", "items": [{"label": "Закодуйте свої дизайн-правила", "body": "Помістіть свої tokens, примітиви та конвенції в `.cursor/rules` або `AGENTS.md` і вкажіть на них Cursor, щоб вивід відповідав бренду, а не звертався до загального вигляду."}, {"label": "Тримайте промпти невеликими", "body": "Щільний цикл Cursor винагороджує сфокусовані запити — ітеруйте по одному компоненту чи стану за раз і спостерігайте попередній перегляд між проходами."}]}]}, {"id": "preview-workflow", "heading": "Робочий процес «попередній перегляд → UI»", "blocks": [{"kind": "p", "text": "Найрезультативніший дизайн-цикл із Cursor — перетворити референс на робочий, адаптивний UI та ітерувати в редакторі, доки він не збіжиться — спостерігаючи живий попередній перегляд увесь час замість того, щоб вгадувати."}, {"kind": "ol", "items": ["Починайте з найчіткіших візуальних референсів, які у вас є, — і включайте кілька станів (десктоп і мобільний, hover, порожній, завантаження), а не лише один hero-кадр.", "Будьте конкретні в промпті; розпливчасті промпти дають загальний UI.", "Підготуйте дизайн-систему й скажіть Cursor, де живуть tokens і канонічні примітиви.", "Тримайте попередній перегляд усередині редактора відкритим, а dev-сервер запущеним, щоб кожна правка рендерилась миттєво на потрібних вам брейкпойнтах.", "Ітеруйте, порівнюючи відрендерений UI з референсами — і використовуйте прямий вибір елементів у попередньому перегляді для дрібних візуальних корекцій."]}, {"kind": "p", "text": "Подавайте референси, прикріплюючи зображення до чату, а потім задавайте промпт із конкретними обмеженнями:"}, {"kind": "code", "lang": "text", "code": "Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do."}, {"kind": "p", "text": "Комітьте вдалі ітерації й відкочуйте невдалі (кажучи Cursor, коли ви відкочуєте), щоб кожен прохід будувався на чистій основі — та сама дисципліна, що не дає будь-якому циклу агента зноситися."}]}, {"id": "figma", "heading": "Cursor + Figma: дизайн ↔ код через MCP", "blocks": [{"kind": "p", "text": "Cursor підключається до Figma через офіційний сервер Figma MCP, що дає агенту структурований доступ до живого файлу Figma замість плаского скриншота. Це усуває здогадки з передачі."}, {"kind": "steps", "items": [{"label": "Дизайн → Код", "body": "Скопіюйте посилання на фрейм у Figma, вставте його в Cursor і попросіть реалізувати дизайн. Сервер MCP надає реальний дизайн-контекст — компоненти, змінні, дані розкладки, tokens — тож згенерований код відповідає джерелу, а не наближає його."}, {"label": "Лишайтеся узгодженими", "body": "З дизайн-tokens, стилями та компонентами, що послідовно використовуються у Figma (і Code Connect, де доступно), вивід Cursor лишається прив'язаним до вашої реальної дизайн-системи, а не винаходить примітиви заново."}]}, {"kind": "p", "text": "Налаштуйте віддалений сервер Figma MCP одного разу, і він стане доступним для Cursor як першокласний контекст. Оскільки MCP — це відкритий стандарт, той самий сервер можна повторно використовувати в Cursor, Claude Code, Codex і VS Code — саме той тип переносної, мультиагентної можливості, яку Open Design створено оркеструвати."}]}, {"id": "vs", "heading": "Cursor проти Codex проти Claude Code для дизайну", "blocks": [{"kind": "p", "text": "Єдиного переможця для дизайн-роботи немає — у кожного агента своя сильна сторона, і досвідчені команди поєднують їх. Чесне резюме:"}, {"kind": "table", "columns": ["Агент", "Сила в дизайні", "Найкраще для"], "rows": [["Cursor", "Цикл «зроби й подивись» із живим попереднім переглядом усередині редактора та прямим редагуванням елементів", "Щільна робота над UI у режимі «ітеруй і спостерігай» усередині IDE"], ["Codex", "Сильне візуальне опрацювання з frontend skill; розуміння зображень і запуски в пісочниці", "Делеговані асинхронні збірки та переносні правила AGENTS.md"], ["Claude Code", "Конкретні дизайн-рішення (hex, відступи, типографіка) та UX з урахуванням кодової бази", "Фронтенд-міркування й рефактори з великим контекстом"]]}, {"kind": "p", "text": "Сталий вердикт спільноти такий: смак походить від людей — усі три за замовчуванням тяжіють до загальної естетики без skill-ів, референсів і обмежень. Це і є справжня проблема, яку треба розв'язати — і вона має форму дизайн-інструмента, а не моделі."}]}, {"id": "pitfalls", "heading": "Пастки та як уникнути вигляду «AI slop»", "blocks": [{"kind": "p", "text": "Найпоширеніша скарга на дизайн, згенерований Cursor, — що він виглядає загальним: м'які градієнти, плаваючі панелі, завеликі заокруглені кути, драматичні тіні, вайб «Inter-і-фіолетовий», який «кричить, що це зробив ШІ». Серед інших повідомлених проблем — розкладки, що ламаються на мобільному, та інструкції, що протікають у текст UI."}, {"kind": "steps", "items": [{"label": "Додайте дизайн-skill", "body": "Кураторський естетичний skill змушує Cursor обрати реальний напрямок замість вигляду за замовчуванням."}, {"label": "Використовуйте попередній перегляд для перевірки", "body": "Рендерте й самоперевіряйтеся на різних брейкпойнтах у попередньому перегляді всередині редактора, щоб розкладки не ламались на мобільному непомітно."}, {"label": "Надайте tokens і референси", "body": "Реальні дизайн-tokens і референсні скриншоти — найпотужніший важіль якості виводу."}, {"label": "Закодуйте правила в `.cursor/rules`", "body": "Помістіть правила штибу «без hero-карток, максимум два шрифти, ієрархія за брендом» туди, де агент читає їх щоразу."}]}, {"kind": "p", "text": "Зверніть увагу: кожен спосіб пом'якшення зводиться до надання агенту кураторського дизайн-контексту. Підтримувати цей контекст вручну для кожного проєкту — це рутина, яку усуває Open Design."}]}, {"id": "open-design", "heading": "Дизайн із Cursor всередині Open Design", "blocks": [{"kind": "p", "text": "Open Design — це той дизайн-шар з відкритим кодом, якого постійно потребує наведений вище процес. Він трактує Cursor як власний адаптер і обгортає його кураторською бібліотекою skill-ів і дизайн-систем, структурованим конвеєром рендерингу та локальним десктопним UI — щоб дизайн-контекст, який робить Cursor добрим, був на місці з першого запуску, а не збирався вручну щоразу."}, {"kind": "ol", "items": ["Встановіть Open Design і виберіть Cursor як свого агента.", "Автентифікуйтеся своїм акаунтом Cursor або власними ключами моделей (BYOK) — облікові дані залишаються на вашій машині й ніколи не проксіюються через нас.", "Виберіть дизайн-систему та skill, а потім генеруйте презентації, прототипи й лендинги з послідовним смаком.", "Кожен артефакт і файл DESIGN.md живе у вашому власному репозиторії, а не в розміщеній хмарі."]}, {"kind": "p", "text": "Той самий агент Cursor, той самий ключ — плюс реальний, переносний дизайн-процес з відкритим кодом навколо нього. Він local-first і Apache-2.0, тож ніщо у вашій роботі чи облікових даних не залишає вашу машину."}]}], "faqTitle": "Часті запитання", "faq": [{"name": "Чи справді Cursor може виконувати дизайн-роботу?", "text": "Так — із дизайн-skill, дизайн-системою та реальними референсними зображеннями в контексті Cursor створює UI продакшн-якості, адаптивний, а його попередній перегляд усередині редактора дозволяє перевіряти й уточнювати його візуально. Без цього контексту він тяжіє до загального вигляду — і саме цю прогалину закриває Open Design."}, {"name": "Це офіційний продукт Cursor?", "text": "Ні. Open Design — незалежний проєкт з відкритим кодом, який інтегрує Cursor як агента. Він доповнює Cursor local-first відкритою бібліотекою skill-ів і дизайн-систем."}, {"name": "Чи потрібна мені підписка Cursor, щоб проєктувати з Cursor?", "text": "Ви можете використовувати акаунт / підписку Cursor або підключити власні ключі моделей (BYOK). У будь-якому разі Open Design ніколи не проксіює ваші облікові дані — їх безпосередньо використовує ваш агент."}, {"name": "Cursor чи Claude Code для фронтенд-дизайну?", "text": "Обидва сильні. Claude Code відомий конкретними дизайн-рішеннями з урахуванням кодової бази; перевага Cursor — його щільний цикл «зроби й подивись» із живим попереднім переглядом усередині редактора. Багато команд використовують обидва — Open Design дозволяє перемикати агентів без зміни дизайн-процесу."}, {"name": "Як підключити Cursor до Figma?", "text": "Додайте офіційний сервер Figma MCP у Cursor, потім вставте посилання на фрейм Figma в чат і попросіть Cursor реалізувати його. Сервер надає реальні компоненти, змінні та дані розкладки, тож згенерований код відповідає вихідному дизайну."}, {"name": "Як уникнути загальної естетики «AI slop»?", "text": "Додайте дизайн-skill, надайте реальні дизайн-tokens і референсні скриншоти, закодуйте правила бренду в `.cursor/rules` або `AGENTS.md` і перевіряйте на різних брейкпойнтах у попередньому перегляді. Open Design постачає це як кураторську бібліотеку, щоб ви пропустили налаштування для кожного проєкту."}, {"name": "Чи пов'язаний Open Design з Cursor або Anysphere?", "text": "Ні. Cursor — продукт Anysphere; Open Design — незалежний проєкт з відкритим кодом, який підтримує його як власний адаптер. Cursor і Anysphere — торгові марки Anysphere, Inc."}, {"name": "Чи мої файли й облікові дані в безпеці?", "text": "Так — Open Design local-first. Ваші файли, артефакти й DESIGN.md залишаються у вашому власному репозиторії, а ваші облікові дані Cursor чи моделі використовуються безпосередньо вашим агентом і ніколи не маршрутизуються через сервери Open Design."}], "ctaTitle": "Проєктуйте з Cursor, відкрито.", "ctaBody": "Підключіть власний акаунт Cursor або ключі моделей, тримайте кожен файл локально й отримайте кураторську дизайн-бібліотеку навколо агента, яким ви вже користуєтесь.", "ctaActions": [{"label": "Використати Cursor в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставити зірку на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Завантажити десктопний застосунок", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Переглянути всіх підтримуваних агентів"}, + }, + 'opencode': { + ...en['opencode']!, + title: "OpenCode для дизайну — Open Design", + description: "Як люди використовують OpenCode для UI та вебдизайну — файли design.md, UI/UX skill-и, Figma MCP — і як Open Design перетворює OpenCode на local-first дизайн-агента з відкритим кодом.", + breadcrumb: "OpenCode", + label: "Агент · OpenCode", + heading: "OpenCode для дизайну.", + lead: "OpenCode — це термінальний AI-агент для кодування з відкритим кодом. Дизайнери прикручують до нього дизайн-skill-и та файли DESIGN.md, щоб генерувати справжній UI. Open Design робить це структурованим процесом з відкритим кодом — підключіть ключі своїх постачальників, тримайте все локально.", + rich: {"heroCtaLead": "Open Design перетворює OpenCode на local-first дизайн-агента з відкритим кодом — будь-яка модель, яку ви обираєте, з вашим власним ключем постачальника, ваші файли та кураторська бібліотека skill-ів і дизайн-систем навколо нього.", "heroCtaActions": [{"label": "Використати OpenCode в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставити зірку на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Завантажити десктопний застосунок", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "intro": ["OpenCode — це термінальний AI-агент для кодування з відкритим кодом, навмисно незалежний від моделей: ви підключаєте власний ключ постачальника й запускаєте будь-яку модель за тим самим робочим процесом. Така відкритість робить його природною базою для дизайн-роботи — але, як і кожен агент, він створює добрий UI лише тоді, коли ви даєте йому правильні референси, skill-и та цикл перевірки. Це практичний наскрізний посібник з використання OpenCode для UI, фронтенду та роботи з дизайн-системами, а також з його вбудовування в структурований дизайн-процес разом з Open Design.", "Тут розглядається, чим насправді є OpenCode, чому відкритий агент, незалежний від моделей, добре пасує дизайну, як налаштувати його з нуля, цикл «скриншот → UI», як AGENTS.md і MCP розширюють його, як він порівнюється з Codex, Claude Code та Cursor, пастки, через які вивід ШІ виглядає загальним, і як Open Design закриває цю прогалину як відкритий local-first дизайн-шар — природне поєднання, адже обидва проєкти з відкритим кодом і працюють на вашій власній машині."], "heroImage": {"src": "/agents/opencode-design/opencode-design-hero.webp", "alt": "Цикл зворотного зв'язку дизайну OpenCode: термінальний TUI-агент, браузер, що рендерить UI, і робочий простір зі стрілкою зворотного зв'язку", "caption": "Основний цикл: OpenCode будує UI у терміналі, рендерить і перевіряє його у справжньому браузері та ітерує до ваших референсів — на будь-якій моделі, яку ви оберете."}, "tocLabel": "На цій сторінці", "toc": [{"id": "what-is-opencode", "label": "Чим насправді є OpenCode"}, {"id": "why-design", "label": "Чому відкритий агент із будь-якою моделлю пасує дизайну"}, {"id": "setup", "label": "Налаштування OpenCode для дизайну (з нуля)"}, {"id": "screenshot-workflow", "label": "Робочий процес «скриншот → UI»"}, {"id": "extend", "label": "AGENTS.md, MCP та сесії, якими можна ділитися"}, {"id": "vs", "label": "OpenCode проти Codex проти Claude Code проти Cursor"}, {"id": "pitfalls", "label": "Пастки та вигляд «AI slop»"}, {"id": "open-design", "label": "Дизайн із OpenCode в Open Design"}, {"id": "faq", "label": "Часті запитання"}], "sections": [{"id": "what-is-opencode", "heading": "Чим насправді є OpenCode", "blocks": [{"kind": "p", "text": "OpenCode — це AI-агент для кодування з відкритим кодом, створений для терміналу й підтримуваний командою, що стоїть за SST (Anomaly Innovations). Він читає ваш репозиторій, виконує команди, редагує файли й спілкується з великою мовною моделлю — але, на відміну від прив'язаних до вендора агентів, він не постачає власну модель. Ви спрямовуєте його на будь-який постачальник і модель, які захочете, і підключаєте власний ключ."}, {"kind": "p", "text": "Він працює як термінальний UI (TUI), з десктопним застосунком та розширеннями IDE поверх того самого рушія. Під капотом він використовує клієнт-серверну архітектуру, тож агент, що виконує роботу, відокремлений від поверхні, з якої ви ним керуєте. Два вбудовані агенти — build і plan — перемикаються клавішею Tab."}, {"kind": "steps", "items": [{"label": "Незалежний від моделей", "body": "Моделі та постачальники беруться з models.dev, відкритого каталогу. Ви налаштовуєте їх в opencode.json рядком provider/model-id і можете вимкнути постачальників, яких не хочете завантажувати — тож той самий дизайн-процес працює на Anthropic, OpenAI, Google, OpenRouter, локальних моделях тощо."}, {"label": "Файл інструкцій", "body": "OpenCode читає файл AGENTS.md у вашому проєкті (міжінструментальний стандарт, також сумісний із CLAUDE.md) для правил проєкту — природне місце, щоб закодувати ваші дизайн-конвенції. Запустіть /init, щоб згенерувати його."}, {"label": "Розширюваний", "body": "Він підтримує інтеграцію LSP, сервери MCP, теми, комбінації клавіш і кастомні команди, а також посилання на сесії, якими можна ділитися, для співпраці."}]}, {"kind": "ul", "items": ["Супровід: SST / Anomaly Innovations (проєкт з відкритим кодом)", "Облікові дані: ваш(і) власний(і) API-ключ(і) постачальника моделей — BYOK, без прив'язки до вендора", "Ліцензія: MIT, відкритий код"]}]}, {"id": "why-design", "heading": "Чому відкритий агент із будь-якою моделлю пасує дизайн-роботі", "blocks": [{"kind": "p", "text": "OpenCode не має єдиної «дизайн-моделі», як її має вендорний агент — і в цьому суть. Оскільки він незалежний від моделей і відкритий, ви можете запускати той самий дизайн-процес на тій моделі, яка зараз найкраща у фронтенді, замінити її пізніше або відкотитися до локальної моделі — і все без зміни вашого налаштування."}, {"kind": "p", "text": "Але самого вибору моделі мало для смаку. Як і кожен агент для кодування, OpenCode створює загальний UI, доки ви не дасте йому обмежень. Добрий дизайн-вивід походить із трьох вхідних даних, які надаєте ви."}, {"kind": "steps", "items": [{"label": "Дизайн-система", "body": "Реальні tokens, примітиви та конвенції, які агент повторно використовує, щоб вивід відповідав бренду, а не звертався до загального вигляду."}, {"label": "Естетичний skill", "body": "Кураторський skill, що нав'язує реальний смак — стриманий рух, ієрархія за брендом, щонайбільше два шрифти й один акцентний колір — і змушує агента обрати напрямок перед побудовою."}, {"label": "Конкретні референси", "body": "Справжні референсні зображення та кілька станів (десктоп і мобільний, hover, порожній, завантаження), а не один hero-кадр."}]}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-taste-triangle.webp", "alt": "Схема, що показує, як дизайн-система, skill і референсне зображення сходяться в добрий дизайн-результат", "caption": "Смак з'являється з трьох вхідних даних, які надаєте ви: дизайн-системи, skill-а та реальних референсних зображень — незалежно від того, яку модель ви запускаєте."}, {"kind": "p", "text": "Урок: OpenCode дає вам свободу моделі, але смак усе одно походить із кураторського дизайн-контексту. Open Design упаковує саме ці вхідні дані, тому ці двоє пасують одне одному — обидва з відкритим кодом і local-first (далі — детальніше)."}]}, {"id": "setup", "heading": "Налаштуйте OpenCode для дизайну, з нуля", "blocks": [{"kind": "p", "text": "Ось повний шлях від чистої машини до OpenCode, який може будувати й перевіряти UI."}, {"kind": "code", "lang": "bash", "code": "# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set \"provider/model-id\" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the \"mcp\" key in opencode.json"}, {"kind": "image", "src": "/agents/opencode-design/opencode-design-setup-flow.webp", "alt": "Процес налаштування з п'яти кроків: встановлення, автентифікація ключем постачальника, налаштування AGENTS.md, додавання skill-а, перевірка", "caption": "Послідовність налаштування: встановлення → автентифікація (ваш ключ постачальника) → налаштування AGENTS.md → додавання skill-а → перевірка у справжньому браузері."}, {"kind": "steps", "items": [{"label": "Закодуйте свої дизайн-правила", "body": "Помістіть свої tokens, примітиви та конвенції в AGENTS.md (або DESIGN.md, на який є посилання звідти), щоб вивід відповідав бренду, а не звертався до загального вигляду. Опція instructions в opencode.json може вказувати на додаткові файли правил через glob-и."}, {"label": "Виберіть здатну модель", "body": "Оскільки OpenCode незалежний від моделей, виберіть той постачальник/модель, що зараз найсильніший у фронтенді, для дизайн-проходу — і лишіть решту свого процесу незмінною."}]}]}, {"id": "screenshot-workflow", "heading": "Робочий процес «скриншот → UI»", "blocks": [{"kind": "p", "text": "Найрезультативніший дизайн-цикл із будь-яким агентом — перетворити референсне зображення на робочий, адаптивний UI та ітерувати, доки воно не збіжиться. Та сама форма з п'яти кроків застосовна в OpenCode."}, {"kind": "ol", "items": ["Починайте з найчіткіших візуальних референсів, які у вас є, — і включайте кілька станів (десктоп і мобільний, hover, порожній, завантаження), а не лише один hero-кадр.", "Будьте конкретні в промпті; розпливчасті промпти дають загальний UI.", "Підготуйте дизайн-систему й скажіть OpenCode, де живуть tokens і канонічні примітиви (в AGENTS.md).", "Запустіть dev-сервер і змусьте агента рендерити у справжньому браузері, змінюючи розмір під брейкпойнти, щоб перевірити результат.", "Ітеруйте, змушуючи OpenCode порівнювати свою реалізацію зі скриншотами — а не лише підтверджувати, що збірка проходить."]}, {"kind": "p", "text": "Посилайтеся на файли через @ у TUI для нечіткого пошуку у вашій робочій директорії, виконуйте shell-команди інлайн із початковим !, і керуйте діями через команди /. Потім задавайте промпт із конкретними обмеженнями:"}, {"kind": "code", "lang": "bash", "code": "opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints."}, {"kind": "p", "text": "Тримайте промпти невеликими й сфокусованими, комітьте вдалі ітерації й відкочуйте невдалі (кажучи OpenCode, коли ви відкочуєте), щоб кожен прохід будувався на чистій основі."}]}, {"id": "extend", "heading": "AGENTS.md, MCP та сесії, якими можна ділитися", "blocks": [{"kind": "p", "text": "Три точки розширення роблять OpenCode практичним для сталої дизайн-роботи, і всі три чисто лягають на відкритий дизайн-процес."}, {"kind": "steps", "items": [{"label": "Правила AGENTS.md", "body": "Правила проєкту живуть в AGENTS.md у корені репозиторію (або глобальні правила в ~/.config/opencode/AGENTS.md). Це довговічна домівка для ваших дизайн-конвенцій, що читається щоразу, і вона сумісна з файлами CLAUDE.md, які використовують інші агенти."}, {"label": "Сервери MCP", "body": "OpenCode підтримує як локальні (command), так і віддалені (URL) сервери MCP, налаштовані під ключем mcp — переносний спосіб привнести дизайн-контекст і зовнішні інструменти, що працюють між агентами, а не лише в OpenCode."}, {"label": "Сесії, якими можна ділитися", "body": "Команда /share створює публічне посилання на розмову для співпраці чи рев'ю, а /unshare відкликає його — корисно для отримання відгуку про дизайн-прохід."}]}, {"kind": "p", "text": "Це переносні, мультиагентні можливості — саме той тип речей, який Open Design створено оркеструвати, а не відтворювати для кожного проєкту."}]}, {"id": "vs", "heading": "OpenCode проти Codex проти Claude Code проти Cursor для дизайну", "blocks": [{"kind": "p", "text": "Єдиного переможця для дизайн-роботи немає — у кожного агента своя сильна сторона, і досвідчені команди поєднують їх. Чесне резюме:"}, {"kind": "table", "columns": ["Агент", "Сила в дизайні", "Найкраще для"], "rows": [["OpenCode", "Відкритий код і незалежність від моделей; запускайте будь-який постачальник за одним термінальним процесом", "Свобода BYOK, перемикання моделей, повністю відкриті та local-first налаштування"], ["Codex", "Сильне візуальне опрацювання з frontend skill; розуміння зображень", "Делеговані асинхронні, збірки в пісочниці, переносні правила AGENTS.md"], ["Claude Code", "Конкретні дизайн-рішення (hex, відступи, типографіка) та UX з урахуванням кодової бази", "Фронтенд-міркування й рефактори з великим контекстом"], ["Cursor", "Цикл «зроби й подивись» із живим попереднім переглядом та інлайн-правками", "Щільна робота над UI у режимі «ітеруй і спостерігай» усередині IDE"]]}, {"kind": "p", "text": "Сталий вердикт спільноти такий: смак походить від людей — усі вони за замовчуванням тяжіють до загальної естетики без skill-ів, референсів і обмежень. Це і є справжня проблема, яку треба розв'язати — і вона має форму дизайн-інструмента, а не моделі, і саме тому відкритий агент на кшталт OpenCode так добре поєднується з відкритим дизайн-шаром."}]}, {"id": "pitfalls", "heading": "Пастки та як уникнути вигляду «AI slop»", "blocks": [{"kind": "p", "text": "Найпоширеніша скарга на дизайн, згенерований ШІ, — що він виглядає загальним: м'які градієнти, плаваючі панелі, завеликі заокруглені кути, драматичні тіні, вайб «Inter-і-фіолетовий», який «кричить, що це зробив ШІ». Серед інших повідомлених проблем — поламані мобільні розкладки та інструкції, що протікають у текст UI. Жодна з них не унікальна для OpenCode; це те, що стається, коли будь-який агент працює без кураторського дизайн-контексту."}, {"kind": "steps", "items": [{"label": "Додайте естетичний skill", "body": "Кураторський дизайн-skill змушує агента обрати реальний напрямок замість вигляду за замовчуванням."}, {"label": "Перевіряйте у справжньому браузері", "body": "Рендерте й самоперевіряйтеся на різних брейкпойнтах, щоб розкладки не ламались на мобільному непомітно."}, {"label": "Надайте tokens і референси", "body": "Реальні дизайн-tokens і референсні скриншоти — найпотужніший важіль якості виводу."}, {"label": "Закодуйте правила в AGENTS.md", "body": "Помістіть правила штибу «без hero-карток, максимум два шрифти, ієрархія за брендом» туди, де агент читає їх щоразу."}]}, {"kind": "p", "text": "Зверніть увагу: кожен спосіб пом'якшення зводиться до надання агенту кураторського дизайн-контексту — незалежно від того, яку модель ви запускаєте. Підтримувати цей контекст вручну для кожного проєкту — це рутина, яку усуває Open Design."}]}, {"id": "open-design", "heading": "Дизайн із OpenCode всередині Open Design", "blocks": [{"kind": "p", "text": "Open Design — це той дизайн-шар з відкритим кодом, якого постійно потребує наведений вище процес. Він трактує OpenCode як власний адаптер і обгортає його кураторською бібліотекою skill-ів і дизайн-систем, структурованим конвеєром рендерингу та локальним десктопним UI — щоб дизайн-контекст, який робить будь-якого агента добрим, був на місці з першого запуску, а не збирався вручну щоразу. Обидва проєкти з відкритим кодом і local-first, що робить поєднання природним."}, {"kind": "ol", "items": ["Встановіть Open Design і виберіть OpenCode як свого агента.", "Автентифікуйтеся своїм власним API-ключем постачальника моделі (BYOK) — облікові дані залишаються на вашій машині й ніколи не проксіюються через нас.", "Виберіть будь-який постачальник і модель, а також дизайн-систему та skill, а потім генеруйте презентації, прототипи й лендинги з послідовним смаком.", "Кожен артефакт і файл DESIGN.md живе у вашому власному репозиторії, а не в розміщеній хмарі."]}, {"kind": "p", "text": "Той самий агент OpenCode, та сама свобода моделі — плюс реальний, переносний дизайн-процес з відкритим кодом навколо нього. Він local-first і Apache-2.0, тож ніщо у вашій роботі чи облікових даних не залишає вашу машину."}]}], "faqTitle": "Часті запитання", "faq": [{"name": "Чи справді OpenCode може виконувати дизайн-роботу?", "text": "Так — із естетичним skill, дизайн-системою та реальними референсними зображеннями в контексті OpenCode створює UI продакшн-якості, адаптивний, і може перевірити його в браузері. Оскільки він незалежний від моделей, ви запускаєте ту модель, яка зараз найкраща у фронтенді. Без цього кураторського контексту він тяжіє до загального вигляду — і саме цю прогалину закриває Open Design."}, {"name": "Яку модель слід використовувати з OpenCode для дизайну?", "text": "Будь-яку, що вам до вподоби — OpenCode незалежний від постачальників через models.dev, тож ви можете запускати Anthropic, OpenAI, Google, OpenRouter або локальні моделі за тим самим процесом і перемикатися будь-коли. Якість дизайн-виводу залежить набагато більше від вашого skill-а, дизайн-системи та референсів, ніж від самої моделі."}, {"name": "Чи зроблено Open Design командою OpenCode (SST)?", "text": "Ні. Open Design — незалежний проєкт з відкритим кодом, який інтегрує OpenCode як агента. Він доповнює OpenCode local-first відкритою бібліотекою skill-ів і дизайн-систем."}, {"name": "Чи потрібна мені особлива підписка, щоб проєктувати з OpenCode?", "text": "Ні — OpenCode працює за BYOK. Ви підключаєте власний API-ключ постачальника моделі, і Open Design ніколи не проксіює ваші облікові дані. Немає прив'язки до вендора."}, {"name": "OpenCode, Codex чи Claude Code для фронтенд-дизайну?", "text": "Усі сильні, і багато команд поєднують їх. Перевага OpenCode — бути повністю з відкритим кодом і незалежним від моделей; Codex чудовий у делегованих збірках у пісочниці; Claude Code відомий конкретними дизайн-рішеннями з урахуванням кодової бази. Open Design дозволяє перемикати агентів без зміни дизайн-процесу."}, {"name": "Як розширити OpenCode для дизайн-контексту?", "text": "Закодуйте правила в AGENTS.md, додайте сервери MCP під ключем mcp для переносних інструментів і дизайн-контексту та використовуйте сесії, якими можна ділитися, для рев'ю. Open Design постачає кураторську бібліотеку skill-ів і дизайн-систем, щоб ви пропустили налаштування для кожного проєкту."}, {"name": "Чи пов'язаний Open Design з OpenCode або SST?", "text": "Ні. OpenCode — проєкт з відкритим кодом, який підтримує SST (Anomaly Innovations); Open Design — незалежний проєкт з відкритим кодом, який підтримує його як власний адаптер."}, {"name": "Чи мої файли й облікові дані в безпеці?", "text": "Так — Open Design local-first. Ваші файли, артефакти й DESIGN.md залишаються у вашому власному репозиторії, а ваші облікові дані постачальника моделі використовуються безпосередньо вашим агентом і ніколи не маршрутизуються через сервери Open Design."}], "ctaTitle": "Проєктуйте з OpenCode, відкрито.", "ctaBody": "Підключіть власний ключ постачальника моделі, тримайте кожен файл локально й отримайте кураторську дизайн-бібліотеку навколо відкритого агента, яким ви вже користуєтесь.", "ctaActions": [{"label": "Використати OpenCode в Open Design", "href": "/quickstart/", "variant": "primary"}, {"label": "Поставити зірку на GitHub", "href": "https://github.com/nexu-io/open-design", "variant": "ghost", "external": true}, {"label": "Завантажити десктопний застосунок", "href": "https://github.com/nexu-io/open-design/releases", "variant": "ghost", "external": true}], "hubLinkLabel": "Переглянути всіх підтримуваних агентів"}, + }, + }, + }; +} diff --git a/apps/landing-page/app/info-page-i18n.ts b/apps/landing-page/app/info-page-i18n.ts index 8c0627664f..f8d4d6cf0f 100644 --- a/apps/landing-page/app/info-page-i18n.ts +++ b/apps/landing-page/app/info-page-i18n.ts @@ -5,6 +5,7 @@ import { getLandingUiCopy, type LandingLocaleCode, } from './i18n'; +import { buildLocalizedAgentGuides } from './agent-guides.i18n'; type LinkText = { label: string; @@ -42,6 +43,104 @@ type FeatureCopy = { cd: string; }; +// One per-agent detail page (`/agents//`). The hub at `/agents/` +// links into these. `links` are real, externally-verified resources +// about using that agent for design work — never fabricate URLs here. +type AgentResourceLink = { + label: string; + href: string; + source: string; // short attribution shown in the UI, e.g. "YouTube · Steve Schoger" +}; + +// A single block inside a rich (long-form) agent guide section. Blocks +// render in order: prose paragraphs, ordered/unordered lists, a fenced +// code block, an image with alt text, or a comparison table. +type AgentRichBlock = + | { kind: 'p'; text: string } + | { kind: 'ol'; items: string[] } + | { kind: 'ul'; items: string[] } + | { kind: 'steps'; items: LinkText[] } // bolded label + body + | { kind: 'code'; lang: string; code: string } + | { kind: 'image'; src: string; alt: string; caption?: string } + | { + kind: 'table'; + columns: string[]; + rows: string[][]; + }; + +type AgentRichSection = { + // Stable anchor id used by the on-this-page TOC and deep links. + id: string; + heading: string; + blocks: AgentRichBlock[]; +}; + +// One head CTA action. `variant: 'primary'` is the highlighted button. +type AgentCtaAction = { + label: string; + href: string; + variant: 'primary' | 'ghost'; + external?: boolean; +}; + +// Optional long-form payload. When present, the detail page renders the +// industrial how-to layout (hero CTA + deep sections) instead of the +// short default layout. Only pages that opt in carry this; the rest keep +// the compact shape below untouched. +type AgentRichCopy = { + heroCtaLead: string; + heroCtaActions: AgentCtaAction[]; + intro: string[]; + heroImage?: { src: string; alt: string; caption?: string }; + tocLabel: string; + toc: { id: string; label: string }[]; + sections: AgentRichSection[]; + faqTitle: string; + faq: NamedText[]; + ctaTitle: string; + ctaBody: string; + ctaActions: AgentCtaAction[]; + hubLinkLabel: string; +}; + +type AgentGuideCopy = { + title: string; + description: string; + breadcrumb: string; + label: string; + heading: string; + lead: string; + tldrTitle: string; + tldrBody: string; + toc: string[]; + // Optional industrial long-form content. Present only on upgraded pages. + rich?: AgentRichCopy; + // "What is " + aboutTitle: string; + aboutBody: string[]; + vendorLabel: string; + vendor: string; + credentialLabel: string; + credential: string; + // "How people use for design" + designTitle: string; + designLead: string; + designPoints: LinkText[]; + // Real, citable resources + linksTitle: string; + linksLead: string; + links: AgentResourceLink[]; + // "With Open Design" — the drive-to-OD section + withOdTitle: string; + withOdLead: string; + withOdSteps: string[]; + withOdClosing: string; + faqTitle: string; + faq: NamedText[]; + ctaTitle: string; + ctaBody: string; +}; + export interface InfoPageCopy { common: { breadcrumbAria: string; @@ -178,6 +277,10 @@ export interface InfoPageCopy { ctaTitle: string; ctaBody: string; }; + // Per-agent detail pages, keyed by slug (`claude-code`, `codex`, + // `cursor`, `opencode`). Partial: non-en locales that don't override + // a given slug inherit the English copy via the `...en` spread. + agentGuides: Partial>; download: { title: string; description: string; @@ -535,6 +638,923 @@ const INFO_PAGE_COPY: Partial> = { ctaBody: 'Star the repo, grab the desktop build, or run the install in your terminal. Your DESIGN.md system stays in your repo from the first render onward.', }, + agentGuides: { + 'claude-code': { + title: 'Claude Code for design — Open Design', + description: + 'How designers use Claude Code for UI and web design, and how Open Design turns it into a real design agent — local-first, BYOK, with a curated skill and design-system library.', + breadcrumb: 'Claude Code', + label: 'Agent · Claude Code', + heading: 'Claude Code for design.', + lead: 'Claude Code is Anthropic’s terminal coding agent. People already use it to build UIs, design systems, and landing pages. Open Design plugs it into a real design workflow — bring your Anthropic key or Claude subscription, keep every file local.', + tldrTitle: 'TL;DR', + tldrBody: + 'Claude Code is a strong design generator once you give it taste — a design system, an aesthetic skill, a screenshot loop. Open Design ships exactly that as a local-first, open-source layer. Point Claude Code at it with your own key and start designing.', + toc: ['What is Claude Code', 'Designing with Claude Code', 'Resources', 'With Open Design', 'FAQ'], + rich: { + heroCtaLead: + 'Open Design turns Claude Code into a local-first, open-source design agent — your Anthropic key or Claude subscription, your files, a curated skill and design-system library around it.', + heroCtaActions: [ + { label: 'Use Claude Code inside Open Design', href: '/quickstart/', variant: 'primary' }, + { label: 'Star on GitHub', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: 'Download the desktop app', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + intro: [ + 'Claude Code is widely regarded as the coding agent with the best frontend taste — it reasons about interfaces with unusual specificity, naming exact hex values, spacing, and type scales, and it refactors UI across a large codebase without losing the thread. But out of the box it still drifts toward a generic look unless you hand it a design system, skills, and real references. This is a practical, end-to-end guide to using Claude Code for UI, frontend, and design-system work, and to wiring it into a structured workflow with Open Design.', + 'It covers what Claude Code actually is, why it is strong at frontend, how to set it up from zero, the CLAUDE.md and Skills workflow, the official Figma round-trip, how it compares to Codex and Cursor, the pitfalls that make AI output look generic, and how Open Design closes the gap as an open, local-first design layer.', + ], + heroImage: { + src: '/agents/claude-code-design/claude-code-design-hero.webp', + alt: 'Claude Code design feedback loop: terminal agent making specific design decisions, a browser rendering the UI, and a workspace, with a feedback arrow looping back', + caption: 'The core loop: Claude Code reasons out specific UI decisions in the terminal, renders and verifies them in a real browser, and converges against your references.', + }, + tocLabel: 'On this page', + toc: [ + { id: 'what-is-claude-code', label: 'What Claude Code actually is' }, + { id: 'why-design', label: 'Why Claude Code is good at design' }, + { id: 'setup', label: 'Set up Claude Code for design (from zero)' }, + { id: 'skills-workflow', label: 'The CLAUDE.md and Skills workflow' }, + { id: 'figma', label: 'Claude Code + Figma round-trip' }, + { id: 'vs', label: 'Claude Code vs Codex vs Cursor' }, + { id: 'pitfalls', label: 'Pitfalls and the “AI slop” look' }, + { id: 'open-design', label: 'Designing with Claude Code in Open Design' }, + { id: 'faq', label: 'FAQ' }, + ], + sections: [ + { + id: 'what-is-claude-code', + heading: 'What Claude Code actually is', + blocks: [ + { kind: 'p', text: 'Claude Code is Anthropic’s agentic coding tool. It reads your codebase, edits files, runs commands, and integrates with your dev tools — planning, writing, and verifying work from natural-language tasks rather than just autocompleting lines.' }, + { kind: 'p', text: 'It ships across several surfaces that all share the same engine: a terminal CLI, IDE extensions for VS Code, Cursor, and JetBrains, a desktop app with visual diff review, and a web experience for long-running tasks. Your CLAUDE.md files, settings, and MCP servers carry across all of them.' }, + { kind: 'steps', items: [ + { label: 'Instruction file', body: 'Claude Code reads a CLAUDE.md file in your project root at the start of every session — the natural place to encode your design conventions, tokens, and review checklists.' }, + { label: 'Skills', body: 'Agent Skills package repeatable instructions, scripts, and resources that Claude loads on demand, including Anthropic’s official Frontend Design skill for taste.' }, + { label: 'Plan and subagents', body: 'It can plan before acting and spawn subagents that work on different parts of a task in parallel, which keeps large UI refactors coherent.' }, + ] }, + { kind: 'ul', items: [ + 'Vendor: Anthropic', + 'Credential: Anthropic API key (BYOK, via the Console) or a Claude subscription (Pro / Max)', + 'Surfaces: terminal CLI, VS Code / Cursor / JetBrains extensions, desktop app, web', + ] }, + ], + }, + { + id: 'why-design', + heading: 'Why Claude Code is good at design', + blocks: [ + { kind: 'p', text: 'Among coding agents, Claude Code has a reputation for taste in frontend work. A few things explain it.' }, + { kind: 'steps', items: [ + { label: 'Specific, not vague, decisions', body: 'Claude Code tends to commit to concrete choices — exact hex values, spacing scales, type ramps, and component hierarchy — instead of hand-waving, which is what separates a real interface from a placeholder.' }, + { label: 'Codebase-aware reasoning', body: 'With a large working context it refactors UI across many files at once, reusing your existing components and tokens rather than reinventing one-off styles.' }, + { label: 'An official frontend skill', body: 'Anthropic ships a Frontend Design skill that makes Claude write a design direction first and deliberately steers away from generic system fonts and predictable purple gradients.' }, + ] }, + { kind: 'image', src: '/agents/claude-code-design/claude-code-design-taste-triangle.webp', alt: 'Diagram showing design system, skill, and reference image converging into good design output', caption: 'Taste comes from three inputs you provide: a design system, a skill, and real reference images.' }, + { kind: 'p', text: 'The lesson is the same one Anthropic makes about its own models: Claude does not have taste by default — left alone it converges on the statistical center of web design (Inter, purple gradients, soft shadows). It produces good design when you give it constraints. Open Design packages exactly those inputs, which is why the two fit together (more below).' }, + ], + }, + { + id: 'setup', + heading: 'Set up Claude Code for design work, from zero', + blocks: [ + { kind: 'p', text: 'Here is the full path from a clean machine to a Claude Code that can build and verify UI.' }, + { kind: 'code', lang: 'bash', code: '# 1. Install Claude Code (native install, recommended)\ncurl -fsSL https://claude.ai/install.sh | bash\n# or: brew install --cask claude-code\n# Windows PowerShell: irm https://claude.ai/install.ps1 | iex\n\n# 2. Start it in your project and sign in on first run\ncd your-project\nclaude # sign in with your Claude subscription or API key\n\n# 3. Generate project context\n/init # creates a CLAUDE.md for this project\n\n# 4. Add the official Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\nclaude plugin install figma@claude-plugins-official' }, + { kind: 'image', src: '/agents/claude-code-design/claude-code-design-setup-flow.webp', alt: 'Five-step setup flow: install, authenticate, configure CLAUDE.md, add skill, verify', caption: 'The setup sequence: install → authenticate → configure CLAUDE.md → add the Frontend Design skill → enable browser verification.' }, + { kind: 'steps', items: [ + { label: 'Encode your design rules', body: 'Put your tokens, primitives, and conventions in CLAUDE.md and point Claude at them, so output matches a brand instead of defaulting to a generic look.' }, + { label: 'Add browser verification', body: 'Wire a Playwright or Chrome MCP so Claude renders in a real browser and checks its output across breakpoints instead of only confirming the build passes.' }, + ] }, + ], + }, + { + id: 'skills-workflow', + heading: 'The CLAUDE.md and Skills workflow', + blocks: [ + { kind: 'p', text: 'The highest-leverage design loop with Claude Code is feeding it real references plus your design context, then iterating until the UI matches — with CLAUDE.md and Skills carrying the constraints so you do not re-explain them every prompt.' }, + { kind: 'ol', items: [ + 'Start from the clearest visual references you have — and include multiple states (desktop and mobile, hover, empty, loading), not just one hero shot.', + 'Be specific in the prompt; vague prompts produce generic UI even with a strong agent.', + 'Keep your design system and conventions in CLAUDE.md, and tell Claude where the tokens and canonical primitives live.', + 'Add the Frontend Design skill so Claude commits to a real aesthetic direction before writing code.', + 'Wire browser verification so Claude renders, resizes to breakpoints, and compares back to the references — not merely confirms it builds.', + ] }, + { kind: 'p', text: 'Drop a reference image into the session and prompt with concrete constraints:' }, + { kind: 'code', lang: 'bash', code: 'claude "Implement reference-desktop.png and reference-mobile.png in\n React + Vite + Tailwind + TypeScript.\n Reuse the design-system components and tokens described in CLAUDE.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Render it in the browser, verify it matches the references across\n breakpoints, and iterate until it does."' }, + { kind: 'p', text: 'Run a dev server alongside, keep prompts small and focused, and commit good iterations / revert bad ones (telling Claude when you revert) so each pass builds on a clean base. Use plan mode for larger refactors so you can review the approach before any file changes.' }, + ], + }, + { + id: 'figma', + heading: 'Claude Code + Figma: design ↔ code round-trip', + blocks: [ + { kind: 'p', text: 'In February 2026 Anthropic and Figma shipped a first-class, bidirectional integration via the Figma MCP server. It works in both directions.' }, + { kind: 'steps', items: [ + { label: 'Design → Code', body: 'Select a frame in Figma or paste a link into Claude Code, pull the design context, and ask it to implement the design using your existing component library. Code Connect keeps output aligned with your real components.' }, + { label: 'Code → Design', body: 'Build and preview a feature in the browser, then say “Send this to Figma” to capture the running UI as editable Figma layers — entire screen or a selected element.' }, + ] }, + { kind: 'p', text: 'Install it once with claude plugin install figma@claude-plugins-official (Dev Mode MCP requires a paid Figma plan). The same Figma MCP is available to Claude Code, Codex, Cursor, and VS Code — exactly the kind of portable, multi-agent capability Open Design is built to orchestrate.' }, + ], + }, + { + id: 'vs', + heading: 'Claude Code vs Codex vs Cursor for design', + blocks: [ + { kind: 'p', text: 'There is no single winner for design work — each agent has a different strength, and experienced teams stack them. A fair summary:' }, + { kind: 'table', columns: ['Agent', 'Design strength', 'Best for'], rows: [ + ['Claude Code', 'Specific design decisions (hex, spacing, type) and codebase-aware UX reasoning', 'Frontend reasoning and large-context refactors'], + ['Codex', 'Strong visual polish and image understanding; sandboxed async builds', 'Delegated async builds and portable AGENTS.md rules'], + ['Cursor', 'Visual build-and-see loop with live preview and inline edits', 'Tight iterate-and-watch UI work inside an IDE'], + ] }, + { kind: 'p', text: 'The recurring community verdict is that taste comes from humans: all three default to a generic aesthetic without skills, references, and constraints. That is the real problem to solve — and it is design-tool-shaped, not model-shaped.' }, + ], + }, + { + id: 'pitfalls', + heading: 'Pitfalls, and how to avoid the “AI slop” look', + blocks: [ + { kind: 'p', text: 'Even with Claude Code’s reputation for taste, the most common complaint about AI-generated design is that it looks generic — Inter fonts, purple gradients on white, soft shadows, oversized rounded corners, an aesthetic that “screams an AI made this.” Anthropic itself attributes this to distributional convergence: safe choices dominate web training data. Other reported issues include broken mobile layouts and instructions leaking into UI copy.' }, + { kind: 'steps', items: [ + { label: 'Install the Frontend Design skill', body: 'It forces Claude to commit to a real direction and explicitly avoids fonts and gradients overused by AI.' }, + { label: 'Enable browser verification', body: 'Make Claude render and self-check across breakpoints so layouts do not silently break on mobile.' }, + { label: 'Supply tokens and references', body: 'Real design tokens and reference screenshots are the single biggest lever on output quality.' }, + { label: 'Encode rules in CLAUDE.md', body: 'Put “no hero cards, max two typefaces, brand-first hierarchy” style rules where the agent reads them every run.' }, + ] }, + { kind: 'p', text: 'Notice that every mitigation is about giving the agent a curated design context. Maintaining that context by hand, per project, is the toil Open Design removes.' }, + ], + }, + { + id: 'open-design', + heading: 'Designing with Claude Code inside Open Design', + blocks: [ + { kind: 'p', text: 'Open Design is the open-source design layer the workflow above keeps asking for. It treats Claude Code as a first-party adapter and wraps it in a curated skill and design-system library, a structured render pipeline, and a local desktop UI — so the design context that makes Claude Code good is there from the first run, not assembled by hand each time.' }, + { kind: 'ol', items: [ + 'Install Open Design and select Claude Code as your agent.', + 'Authenticate with your Anthropic API key (BYOK) or Claude subscription — credentials stay on your machine and are never proxied through us.', + 'Pick a design system and a skill, then generate decks, prototypes, and landing pages with consistent taste.', + 'Every artifact and DESIGN.md file lives in your own repo, not a hosted cloud.', + ] }, + { kind: 'p', text: 'Same Claude Code agent, same key — plus a real, portable, open-source design workflow around it. It is local-first and Apache-2.0, so nothing about your work or your credentials leaves your machine.' }, + ], + }, + ], + faqTitle: 'Frequently asked questions', + faq: [ + { name: 'Is Claude Code good for design work?', text: 'Yes — it is widely regarded as the coding agent with the best frontend taste, making specific, codebase-aware decisions about hex values, spacing, and type scales. With the Frontend Design skill, a design system, and real reference images in context it produces production-quality, responsive UI and can verify it in a browser. Without that context it tends to default to a generic look, which is the gap Open Design fills.' }, + { name: 'Do I need a Claude subscription to design with Claude Code?', text: 'You can use either an Anthropic API key (BYOK, via the Console) or a Claude subscription (Pro / Max). Either way Open Design never proxies your credentials — they are used directly by your agent on your machine.' }, + { name: 'Claude Code or Codex for frontend design?', text: 'Both are strong. Claude Code is known for specific, codebase-aware design decisions and frontend reasoning; Codex has strong visual polish and excels at delegated, sandboxed builds. Many teams use both — Open Design lets you switch agents without changing your design workflow.' }, + { name: 'How do I connect Claude Code to Figma?', text: 'Install the official Figma plugin with claude plugin install figma@claude-plugins-official. You can then implement Figma frames in code using the design context, and push a running UI back to editable Figma frames with “Send this to Figma.” Dev Mode MCP requires a paid Figma plan.' }, + { name: 'What are Skills and CLAUDE.md?', text: 'CLAUDE.md is a markdown file in your project root that Claude Code reads at the start of every session — the place to encode your design conventions. Skills package repeatable instructions and resources Claude loads on demand, including Anthropic’s official Frontend Design skill. Open Design ships a curated library of both so you skip the per-project setup.' }, + { name: 'How do I avoid the generic “AI slop” aesthetic?', text: 'Install the Frontend Design skill, supply real design tokens and reference screenshots, encode brand rules in CLAUDE.md, and enable browser verification. Open Design ships these as a curated library so you skip the per-project setup.' }, + { name: 'Is Open Design affiliated with Anthropic?', text: 'No. Claude Code is a product of Anthropic; Open Design is an independent open-source project that supports it as a first-party adapter. Claude and Claude Code are trademarks of Anthropic.' }, + { name: 'Are my files and credentials safe?', text: 'Yes — Open Design is local-first and Apache-2.0. Your files, artifacts, and DESIGN.md stay in your own repo, and your Anthropic credentials are used directly by your agent, never routed through Open Design servers.' }, + ], + ctaTitle: 'Design with Claude Code, the open way.', + ctaBody: 'Bring your own Anthropic key or Claude subscription, keep every file local, and get a curated design library around the agent you already use.', + ctaActions: [ + { label: 'Use Claude Code inside Open Design', href: '/quickstart/', variant: 'primary' }, + { label: 'Star on GitHub', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: 'Download the desktop app', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + hubLinkLabel: 'See all supported agents', + }, + aboutTitle: 'What is Claude Code', + aboutBody: [ + 'Claude Code is Anthropic’s agentic command-line tool: you describe a task in natural language and it reads, writes, and runs code in your project until the task is done.', + 'It is a coding agent, not a design tool — but design is one of its strongest emergent uses. With the right skills and a design system in context, it generates production HTML/CSS/React, iterates on screenshots, and maintains design tokens.', + 'Open Design treats Claude Code as a first-party adapter, so the same agent you code with becomes the engine behind a structured design workflow.', + ], + vendorLabel: 'Vendor', + vendor: 'Anthropic', + credentialLabel: 'Credential', + credential: 'Anthropic API key (BYOK) or Claude subscription', + designTitle: 'Designing with Claude Code', + designLead: + 'The community has converged on a few patterns that turn Claude Code from a generic code generator into something with real design judgment:', + designPoints: [ + { label: 'Design system first', body: 'Drop a DESIGN.md / tokens / Tailwind config into the project so output matches a brand instead of defaulting to “AI slop”.' }, + { label: 'Aesthetic skills', body: 'Skills like Anthropic’s frontend-design make Claude Code commit to a typography/color/motion direction before writing any markup.' }, + { label: 'Figma → code', body: 'Wire the Figma MCP server in and Claude Code turns frames into production components with real tokens.' }, + { label: 'Screenshot loop', body: 'Let it screenshot its own UI, compare to a reference, and iterate — the agentic design feedback loop.' }, + ], + linksTitle: 'Real-world resources', + linksLead: 'Tutorials, skills, and walkthroughs people are actually using to design with Claude Code:', + links: [ + { label: 'Designing with Claude Code (Steve Schoger, Tailwind Labs)', href: 'https://www.youtube.com/watch?v=lkKGQVHrXzE', source: 'YouTube · Steve Schoger' }, + { label: 'Claude Code for Designers in 10 Minutes', href: 'https://www.youtube.com/watch?v=NMi2LnFrUxw', source: 'YouTube · Adrien' }, + { label: 'anthropics/skills — frontend-design skill', href: 'https://github.com/anthropics/skills/blob/main/skills/frontend-design/SKILL.md', source: 'GitHub · Anthropic' }, + { label: 'Claude Code for designers — full tutorial', href: 'https://www.builder.io/blog/claude-code-for-designers', source: 'Blog · Builder.io' }, + { label: 'The web design workflow that actually works', href: 'https://tutorialsdojo.com/claude-code-the-web-design-workflow-that-actually-works/', source: 'Blog · Tutorials Dojo' }, + ], + withOdTitle: 'Claude Code + Open Design', + withOdLead: + 'Open Design is the design layer Claude Code is missing: a curated skill and design-system library, a structured render pipeline, and a desktop UI — all open-source and local-first.', + withOdSteps: [ + 'Install Open Design and select Claude Code as your agent.', + 'Authenticate with your Anthropic API key (BYOK) or Claude subscription — nothing is proxied through us.', + 'Pick a design system and a skill, then generate decks, prototypes, and landing pages with consistent taste.', + 'Every artifact and DESIGN.md file stays in your own repo.', + ], + withOdClosing: + 'Same agent, same key — plus a real design workflow around it.', + faqTitle: 'FAQ', + faq: [ + { name: 'Can Claude Code really do design work?', text: 'Yes — with a design system and aesthetic skills in context it generates production-quality UI. Open Design provides both out of the box so you skip the setup.' }, + { name: 'Do I need a Claude subscription?', text: 'You can use either an Anthropic API key (BYOK) or your Claude subscription. Open Design never proxies your credentials.' }, + { name: 'Is this an official Anthropic product?', text: 'No. Open Design is an independent open-source project. Claude Code is a trademark of Anthropic; we integrate with it as a first-party adapter.' }, + ], + ctaTitle: 'Design with Claude Code, the open way.', + ctaBody: 'Star the repo, download the desktop app, or join the community to request an adapter.', + }, + codex: { + title: 'Codex for design — Open Design', + description: + 'How people use OpenAI Codex for UI and web design — the Product Design plugin, Figma integration, frontend skills — and how Open Design turns Codex into a local-first, open-source design agent.', + breadcrumb: 'Codex', + label: 'Agent · Codex', + heading: 'Codex for design.', + lead: 'Codex is OpenAI’s coding agent. With its Product Design plugin and Figma integration it has become a serious design tool. Open Design wires Codex into an open-source design workflow — your OpenAI key or ChatGPT subscription, your files, local-first.', + tldrTitle: 'TL;DR', + tldrBody: + 'Codex turns screenshots and user stories into responsive UI, and round-trips designs to Figma. Open Design gives it a curated design-system and skill library plus a desktop workflow — bring your own key and keep everything local.', + toc: ['What is Codex', 'Designing with Codex', 'Resources', 'With Open Design', 'FAQ'], + rich: { + heroCtaLead: + 'Open Design turns Codex into a local-first, open-source design agent — your OpenAI key, your files, a curated skill and design-system library around it.', + heroCtaActions: [ + { label: 'Use Codex inside Open Design', href: '/quickstart/', variant: 'primary' }, + { label: 'Star on GitHub', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: 'Download the desktop app', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + intro: [ + 'OpenAI Codex started as a code generator, but in 2026 it became a credible tool for designing real interfaces — once you give it the right references, skills, and verification loop. This is a practical, end-to-end guide to using Codex for UI, frontend, and design-system work, and to wiring it into a structured design workflow with Open Design.', + 'It covers what Codex is today, why it is suddenly good at frontend, how to set it up from zero, the screenshot-to-UI loop, the official Figma round-trip, how it compares to Cursor and Claude Code, the pitfalls that make AI output look generic, and how Open Design closes the gap as an open, local-first design layer.', + ], + heroImage: { + src: '/agents/codex-design/codex-design-workflow-loop.webp', + alt: 'Codex design feedback loop: terminal agent, browser rendering the UI, and a workspace, with a feedback arrow looping back', + caption: 'The core loop: Codex builds UI in the terminal, renders and verifies it in a real browser, and iterates against your references.', + }, + tocLabel: 'On this page', + toc: [ + { id: 'what-is-codex', label: 'What OpenAI Codex actually is' }, + { id: 'why-design', label: 'Why Codex is good at design now' }, + { id: 'setup', label: 'Set up Codex for design (from zero)' }, + { id: 'screenshot-workflow', label: 'The screenshot-to-UI workflow' }, + { id: 'figma', label: 'Codex + Figma round-trip' }, + { id: 'vs', label: 'Codex vs Cursor vs Claude Code' }, + { id: 'pitfalls', label: 'Pitfalls and the “AI slop” look' }, + { id: 'open-design', label: 'Designing with Codex in Open Design' }, + { id: 'faq', label: 'FAQ' }, + ], + sections: [ + { + id: 'what-is-codex', + heading: 'What OpenAI Codex actually is (and what it isn’t)', + blocks: [ + { kind: 'p', text: 'First, a disambiguation that trips up almost everyone searching for “Codex.” The original OpenAI Codex was a 2021 code-completion model that powered early GitHub Copilot and was deprecated in 2023. That is not what this page is about. Today’s Codex is OpenAI’s agentic coding tool — it plans, writes, runs, and verifies code from natural-language tasks.' }, + { kind: 'p', text: 'Modern Codex ships across four surfaces: a terminal CLI (rewritten in Rust, Apache-2.0 licensed), an IDE extension for VS Code, Cursor, and Windsurf, a cloud/web experience for delegated async tasks, and a desktop app with an in-app browser and Computer Use.' }, + { kind: 'steps', items: [ + { label: 'Default model', body: 'As of mid-2026 the recommended model is gpt-5.5, with gpt-5.4 being the model OpenAI explicitly trained for frontend and computer use.' }, + { label: 'Instruction file', body: 'Codex reads an AGENTS.md file in your project (a cross-tool standard) for project rules — the natural place to encode your design conventions.' }, + { label: 'Sandbox', body: 'It runs in a kernel-level sandbox (workspace-write by default), so an agent editing your UI cannot wander outside the project.' }, + ] }, + { kind: 'ul', items: [ + 'Vendor: OpenAI', + 'Credential: OpenAI API key (BYOK) or ChatGPT subscription (Free / Go / Plus / Pro / Business / Enterprise)', + 'License of the CLI: Apache-2.0, open source', + ] }, + ], + }, + { + id: 'why-design', + heading: 'Why Codex is good at design now', + blocks: [ + { kind: 'p', text: 'Three things converged in early 2026 to make Codex a real design tool rather than a generic code generator.' }, + { kind: 'steps', items: [ + { label: 'A frontend-trained model', body: 'OpenAI shipped GPT-5.4, its first mainline model trained for frontend and computer use, with much better image understanding across the design workflow and stronger self-verification. It can even generate mood boards and visual options before committing to final assets.' }, + { label: 'An official frontend skill', body: 'The openai/skills catalog ships a curated frontend-skill that enforces real taste: cardless layouts, full-bleed heroes, brand-first hierarchy, restrained motion, at most two typefaces and one accent color — and makes Codex write a visual thesis before building.' }, + { label: 'Browser verification', body: 'With the Playwright skill Codex opens a real browser, resizes to breakpoints, and compares its output back to the reference instead of just checking that the build passes.' }, + ] }, + { kind: 'image', src: '/agents/codex-design/codex-design-taste-triangle.webp', alt: 'Diagram showing design system, skill, and reference image converging into good design output', caption: 'Taste comes from three inputs you provide: a design system, a skill, and real reference images.' }, + { kind: 'p', text: 'The lesson behind all three: Codex does not have taste by default. It produces good design when you give it constraints — a design system, an aesthetic skill, and concrete references. Open Design packages exactly those inputs, which is why the two fit together (more below).' }, + ], + }, + { + id: 'setup', + heading: 'Set up Codex for design work, from zero', + blocks: [ + { kind: 'p', text: 'Here is the full path from a clean machine to a Codex that can build and verify UI.' }, + { kind: 'code', lang: 'bash', code: '# 1. Install the Codex CLI\nnpm install -g @openai/codex\n# or: brew install --cask codex\n# or: curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. Authenticate (ChatGPT sign-in recommended for higher limits)\ncodex # then choose “Sign in with ChatGPT”\n\n# 3. Generate project context\ncodex # inside your project, run /init to create AGENTS.md\n\n# 4. Add the official frontend skill, then restart Codex\n# (in the Codex app) $skill-installer frontend-skill\n\n# 5. Wire the Figma MCP server (optional, for design handoff)\ncodex mcp add figma --url https://mcp.figma.com/mcp' }, + { kind: 'image', src: '/agents/codex-design/codex-design-setup-flow.webp', alt: 'Five-step setup flow: install, authenticate, configure, install skill, verify', caption: 'The setup sequence: install → authenticate → configure AGENTS.md → install the frontend skill → enable browser verification.' }, + { kind: 'steps', items: [ + { label: 'Encode your design rules', body: 'Put your tokens, primitives, and conventions in AGENTS.md or a DESIGN.md and point Codex at them, so output matches a brand instead of defaulting to a generic look.' }, + { label: 'Choose the right reasoning level', body: 'OpenAI notes that low-to-medium reasoning levels often produce stronger frontend results than the highest setting.' }, + ] }, + ], + }, + { + id: 'screenshot-workflow', + heading: 'The screenshot-to-UI workflow', + blocks: [ + { kind: 'p', text: 'The highest-leverage design loop with Codex is turning a reference image into working, responsive UI and iterating until it matches. OpenAI’s own guidance distills to five steps.' }, + { kind: 'ol', items: [ + 'Start from the clearest visual references you have — and include multiple states (desktop and mobile, hover, empty, loading), not just one hero shot.', + 'Be specific in the prompt; vague prompts produce generic UI.', + 'Prepare a design system and tell Codex where the tokens and canonical primitives live.', + 'Enable the Playwright interactive skill so Codex renders in a real browser and resizes to breakpoints.', + 'Iterate by having Codex compare its implementation back to the screenshots — not merely confirm it builds.', + ] }, + { kind: 'p', text: 'Feed images by dragging a screenshot into the terminal or with the image flag, then prompt with concrete constraints:' }, + { kind: 'code', lang: 'bash', code: 'codex -i reference-desktop.png -i reference-mobile.png \\\n "Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens.\n Match spacing, layout, and hierarchy; make it responsive.\n Use the Playwright skill to verify the UI matches the\n references and iterate until it does."' }, + { kind: 'p', text: 'Run a dev server in a second terminal, keep prompts small and focused, and commit good iterations / revert bad ones (telling Codex when you revert) so each pass builds on a clean base.' }, + ], + }, + { + id: 'figma', + heading: 'Codex + Figma: design ↔ code round-trip', + blocks: [ + { kind: 'p', text: 'In February 2026 OpenAI and Figma announced an official partnership, turning the earlier Figma MCP beta into a first-class, bidirectional integration. It works in both directions.' }, + { kind: 'steps', items: [ + { label: 'Design → Code', body: 'Copy a frame’s “link to selection” in Figma, paste it into Codex with get_design_context, and ask it to implement the design using your existing component library.' }, + { label: 'Code → Design', body: 'The generate_figma_design tool (“Code to Canvas”) turns a live, running UI back into editable Figma frames — entire screen, a selected element, or a whole file.' }, + ] }, + { kind: 'p', text: 'The Figma MCP runs as a remote server and is exempt from rate limits. Add it once and it is available to Codex, Claude Code, Cursor, VS Code, and more — which is exactly the kind of portable, multi-agent capability Open Design is built to orchestrate.' }, + ], + }, + { + id: 'vs', + heading: 'Codex vs Cursor vs Claude Code for design', + blocks: [ + { kind: 'p', text: 'There is no single winner for design work — each agent has a different strength, and experienced teams stack them. A fair summary:' }, + { kind: 'table', columns: ['Agent', 'Design strength', 'Best for'], rows: [ + ['Codex', 'Strong visual polish after GPT-5.4 + frontend-skill; image understanding', 'Delegated async builds, sandboxed runs, portable AGENTS.md rules'], + ['Cursor', 'Visual build-and-see loop with live preview and inline edits', 'Tight iterate-and-watch UI work inside an IDE'], + ['Claude Code', 'Specific design decisions (hex, spacing, type) and codebase-aware UX', 'Frontend reasoning and large-context refactors'], + ] }, + { kind: 'p', text: 'The recurring community verdict is that taste comes from humans: all three default to a generic aesthetic without skills, references, and constraints. That is the real problem to solve — and it is design-tool-shaped, not model-shaped.' }, + ], + }, + { + id: 'pitfalls', + heading: 'Pitfalls, and how to avoid the “AI slop” look', + blocks: [ + { kind: 'p', text: 'The most common complaint about Codex-generated design is that it looks generic — soft gradients, floating panels, oversized rounded corners, dramatic shadows, an Inter-and-purple vibe that “screams an AI made this.” Other reported issues include broken mobile layouts, instructions leaking into UI copy, and hitting usage limits quickly.' }, + { kind: 'steps', items: [ + { label: 'Install a frontend skill', body: 'A curated aesthetic skill forces Codex to commit to a real direction instead of the default look.' }, + { label: 'Enable Playwright verification', body: 'Make Codex render and self-check across breakpoints so layouts do not silently break on mobile.' }, + { label: 'Supply tokens and references', body: 'Real design tokens and reference screenshots are the single biggest lever on output quality.' }, + { label: 'Encode rules in AGENTS.md', body: 'Put “no hero cards, max two typefaces, brand-first hierarchy” style rules where the agent reads them every run.' }, + ] }, + { kind: 'p', text: 'Notice that every mitigation is about giving the agent a curated design context. Maintaining that context by hand, per project, is the toil Open Design removes.' }, + ], + }, + { + id: 'open-design', + heading: 'Designing with Codex inside Open Design', + blocks: [ + { kind: 'p', text: 'Open Design is the open-source design layer the workflow above keeps asking for. It treats Codex as a first-party adapter and wraps it in a curated skill and design-system library, a structured render pipeline, and a local desktop UI — so the design context that makes Codex good is there from the first run, not assembled by hand each time.' }, + { kind: 'ol', items: [ + 'Install Open Design and select Codex as your agent.', + 'Authenticate with your OpenAI API key (BYOK) or ChatGPT subscription — credentials stay on your machine and are never proxied through us.', + 'Pick a design system and a skill, then generate decks, prototypes, and landing pages with consistent taste.', + 'Every artifact and DESIGN.md file lives in your own repo, not a hosted cloud.', + ] }, + { kind: 'p', text: 'Same Codex agent, same key — plus a real, portable, open-source design workflow around it. It is local-first and Apache-2.0, so nothing about your work or your credentials leaves your machine.' }, + ], + }, + ], + faqTitle: 'Frequently asked questions', + faq: [ + { name: 'Can OpenAI Codex really do design work?', text: 'Yes — with a frontend skill, a design system, and real reference images in context, Codex (especially on GPT-5.4) produces production-quality, responsive UI and can verify it in a browser. Without that context it tends to default to a generic look, which is the gap Open Design fills.' }, + { name: 'Is this the OpenAI Codex Product Design plugin?', text: 'No. Open Design is an independent open-source project that integrates Codex as an agent. It complements OpenAI’s own tooling with a local-first, open skill and design-system library.' }, + { name: 'Do I need a ChatGPT subscription to design with Codex?', text: 'You can use either an OpenAI API key (BYOK) or your ChatGPT subscription. ChatGPT sign-in generally gives more generous limits; Open Design never proxies your credentials either way.' }, + { name: 'Codex or Claude Code for frontend design?', text: 'Both are strong. Claude Code is known for specific, codebase-aware design decisions; Codex has strong visual polish after GPT-5.4 and excels at delegated, sandboxed builds. Many teams use both — Open Design lets you switch agents without changing your design workflow.' }, + { name: 'How do I connect Codex to Figma?', text: 'Add the official Figma MCP server (codex mcp add figma --url https://mcp.figma.com/mcp). You can then implement Figma frames in code with get_design_context and push a running UI back to editable Figma frames with generate_figma_design.' }, + { name: 'How do I avoid the generic “AI slop” aesthetic?', text: 'Install a frontend skill, supply real design tokens and reference screenshots, encode brand rules in AGENTS.md, and enable Playwright verification. Open Design ships these as a curated library so you skip the per-project setup.' }, + { name: 'Is Open Design affiliated with OpenAI?', text: 'No. Codex is a product of OpenAI; Open Design is an independent open-source project that supports it as a first-party adapter. OpenAI and Codex are trademarks of OpenAI.' }, + { name: 'Are my files and credentials safe?', text: 'Yes — Open Design is local-first. Your files, artifacts, and DESIGN.md stay in your own repo, and your OpenAI credentials are used directly by your agent, never routed through Open Design servers.' }, + ], + ctaTitle: 'Design with Codex, the open way.', + ctaBody: 'Bring your own OpenAI key, keep every file local, and get a curated design library around the agent you already use.', + ctaActions: [ + { label: 'Use Codex inside Open Design', href: '/quickstart/', variant: 'primary' }, + { label: 'Star on GitHub', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: 'Download the desktop app', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + hubLinkLabel: 'See all supported agents', + }, + aboutTitle: 'What is Codex', + aboutBody: [ + 'Codex is OpenAI’s agentic coding system — a CLI and ChatGPT-integrated agent that plans, writes, and runs code from natural-language tasks.', + 'OpenAI now ships a role-specific Product Design plugin and a Figma integration, so Codex can explore directions, audit flows, prototype from a live URL, and export to Figma or Canva.', + 'Open Design treats Codex as a first-party adapter, so the agent slots into a structured, open-source design pipeline.', + ], + vendorLabel: 'Vendor', + vendor: 'OpenAI', + credentialLabel: 'Credential', + credential: 'OpenAI API key (BYOK) or ChatGPT subscription', + designTitle: 'Designing with Codex', + designLead: + 'Codex’s design story moved fast in 2026, clustered around a few official and community capabilities:', + designPoints: [ + { label: 'Product Design plugin', body: 'OpenAI’s role plugin: explore directions, audit user flows, prototype from a live URL, make screenshots interactive, export to Figma/Canva.' }, + { label: 'Screenshot → responsive UI', body: 'Codex turns a reference image into responsive markup and visually diffs against it across breakpoints with the Playwright skill.' }, + { label: 'Codex ↔ Figma', body: 'The Figma MCP server brings design context into code and turns a running UI back into editable Figma frames.' }, + { label: 'Frontend design skills', body: 'Community and official skills lock an aesthetic direction so output avoids the generic “purple AI slop” look.' }, + ], + linksTitle: 'Real-world resources', + linksLead: 'Official docs, Figma integration, and walkthroughs for designing with Codex:', + links: [ + { label: 'Build responsive front-end designs (Codex docs)', href: 'https://developers.openai.com/codex/use-cases/frontend-designs', source: 'Docs · OpenAI' }, + { label: 'Introducing Codex to Figma', href: 'https://www.figma.com/blog/introducing-codex-to-figma/', source: 'Blog · Figma' }, + { label: 'Design with ChatGPT and Codex: The Designer’s Guide', href: 'https://www.youtube.com/watch?v=rW7vVVmKTS8', source: 'YouTube · UI Collective' }, + { label: 'openai/skills — frontend design skills', href: 'https://github.com/openai/skills', source: 'GitHub · OpenAI' }, + { label: 'New Codex design workflow', href: 'https://www.youtube.com/watch?v=CPg5UYbYLhA', source: 'YouTube · Lukas Margerie' }, + ], + withOdTitle: 'Codex + Open Design', + withOdLead: + 'Open Design is the open-source design layer around Codex: a curated skill and design-system library, a structured render pipeline, and a local desktop UI.', + withOdSteps: [ + 'Install Open Design and select Codex as your agent.', + 'Authenticate with your OpenAI API key (BYOK) or ChatGPT subscription — credentials stay on your machine.', + 'Choose a design system and skill, then generate decks, prototypes, and landing pages with consistent taste.', + 'Artifacts and DESIGN.md files live in your own repo, not a hosted cloud.', + ], + withOdClosing: + 'The same Codex agent — with a real, portable design workflow around it.', + faqTitle: 'FAQ', + faq: [ + { name: 'Is this the OpenAI Codex Product Design plugin?', text: 'No. Open Design is an independent open-source project that integrates Codex as an agent. It complements OpenAI’s own plugin with a local-first, open library.' }, + { name: 'Do I need a ChatGPT subscription?', text: 'You can use an OpenAI API key (BYOK) or your ChatGPT subscription. Open Design never proxies your credentials.' }, + { name: 'Is Open Design affiliated with OpenAI?', text: 'No. Codex is a product of OpenAI; Open Design is an independent open-source project that supports it as a first-party adapter.' }, + ], + ctaTitle: 'Design with Codex, the open way.', + ctaBody: 'Star the repo, download the desktop app, or join the community to request an adapter.', + }, + cursor: { + title: 'Cursor for designers — Open Design', + description: + 'How designers use Cursor for UI and web design — Design Mode, Figma-to-code, the Figma MCP — and how Open Design turns Cursor into a local-first, open-source design agent.', + breadcrumb: 'Cursor', + label: 'Agent · Cursor', + heading: 'Cursor for designers.', + lead: 'Cursor is the AI code editor, now with a visual Design Mode. Designers use it to edit UI by pointing and drawing, and to turn Figma into code. Open Design plugs Cursor Agent into an open-source design workflow that keeps your files local.', + tldrTitle: 'TL;DR', + tldrBody: + 'Cursor’s Design Mode lets you edit a live UI by clicking, sketching, or talking; its Figma MCP integrations bring real design context into code. Open Design adds a curated skill and design-system library on top — your provider keys, your repo.', + toc: ['What is Cursor', 'Designing with Cursor', 'Resources', 'With Open Design', 'FAQ'], + rich: { + heroCtaLead: + 'Open Design turns Cursor into a local-first, open-source design agent — your Cursor account or model keys, your files, a curated skill and design-system library around it.', + heroCtaActions: [ + { label: 'Use Cursor inside Open Design', href: '/quickstart/', variant: 'primary' }, + { label: 'Star on GitHub', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: 'Download the desktop app', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + intro: [ + 'Cursor is the AI-first code editor that made “build it and watch it render” the default way to ship UI. With Agent mode, inline edits, an in-editor preview, and Figma over MCP, it has become a genuine design tool — once you give it the right references, rules, and a verification loop. This is a practical, end-to-end guide to using Cursor for UI, frontend, and design-system work, and to wiring it into a structured design workflow with Open Design.', + 'It covers what Cursor actually is, why its tight iterate-and-watch loop is good for design, how to set it up from zero, the screenshot-and-preview-to-UI loop, the Figma round-trip over MCP, how it compares to Codex and Claude Code, the pitfalls that make AI output look generic, and how Open Design closes the gap as an open, local-first design layer.', + ], + heroImage: { + src: '/agents/cursor-design/cursor-design-hero.webp', + alt: 'Cursor design convergence: editor on the left, a curated skill and design-system hub in the middle with the Cursor mark at center, and a rendered UI on the right', + caption: 'The core idea: Cursor edits and renders UI in the editor, while a curated design hub feeds it the system, skills, and references that make output look intentional.', + }, + tocLabel: 'On this page', + toc: [ + { id: 'what-is-cursor', label: 'What Cursor actually is' }, + { id: 'why-design', label: 'Why Cursor is good at design' }, + { id: 'setup', label: 'Set up Cursor for design (from zero)' }, + { id: 'preview-workflow', label: 'The preview-to-UI workflow' }, + { id: 'figma', label: 'Cursor + Figma over MCP' }, + { id: 'vs', label: 'Cursor vs Codex vs Claude Code' }, + { id: 'pitfalls', label: 'Pitfalls and the “AI slop” look' }, + { id: 'open-design', label: 'Designing with Cursor in Open Design' }, + { id: 'faq', label: 'FAQ' }, + ], + sections: [ + { + id: 'what-is-cursor', + heading: 'What Cursor actually is', + blocks: [ + { kind: 'p', text: 'Cursor is an AI-first code editor built by Anysphere. It is a fork of VS Code, so it keeps the familiar editor, extensions, and keybindings, but rebuilds the workflow around an AI agent that can read your whole project, edit multiple files, run commands, and iterate with you in the loop.' }, + { kind: 'p', text: 'For design work the important surfaces are Agent mode (you describe an outcome and Cursor plans and edits across files), inline edits and Tab completions for fast tweaks, an in-editor preview / browser so you can see the running UI without leaving the window, and MCP support that lets it pull in external context like a live Figma file.' }, + { kind: 'steps', items: [ + { label: 'Project rules', body: 'Cursor reads project instruction files — versioned `.mdc` rules under `.cursor/rules`, and a plain `AGENTS.md` — so you can encode your design conventions where the agent reads them every run.' }, + { label: 'Models', body: 'Cursor is model-flexible: it ships with frontier models through your subscription and also supports bringing your own model keys, so you choose the engine behind the same editor workflow.' }, + { label: 'MCP', body: 'It speaks the Model Context Protocol, so external servers — most relevantly the Figma MCP server — become first-class context for the agent.' }, + ] }, + { kind: 'ul', items: [ + 'Vendor: Anysphere', + 'Credential: Cursor account / subscription (Hobby / Pro / Business) or your own model keys (BYOK)', + 'Form: AI-first code editor (VS Code fork) with an in-editor agent and preview', + ] }, + ], + }, + { + id: 'why-design', + heading: 'Why Cursor is good at design', + blocks: [ + { kind: 'p', text: 'Cursor’s design edge is not a single feature — it is the tightness of the build-and-see loop. Three things make it feel like a design tool rather than a generic code generator.' }, + { kind: 'steps', items: [ + { label: 'A tight iterate-and-watch loop', body: 'You prompt, Cursor edits across files, and the in-editor preview renders the result immediately — so you adjust spacing, hierarchy, and motion in seconds instead of round-tripping through a separate terminal and browser.' }, + { label: 'Direct visual editing', body: 'Beyond chat, Cursor lets you select elements in the preview and nudge styles, so small visual corrections feel like design edits rather than code archaeology.' }, + { label: 'Project rules and MCP context', body: 'With `.cursor/rules` (or `AGENTS.md`) and the Figma MCP server, the agent works against your tokens, components, and real design specs instead of guessing.' }, + ] }, + { kind: 'image', src: '/agents/cursor-design/cursor-design-taste-triangle.webp', alt: 'Diagram showing design system, skill, and reference image converging into good design output', caption: 'Taste comes from three inputs you provide: a design system, a skill, and real reference images.' }, + { kind: 'p', text: 'The lesson is the same one every agent teaches: Cursor does not have taste by default. It produces good design when you give it constraints — a design system, an aesthetic skill, and concrete references. Open Design packages exactly those inputs, which is why the two fit together (more below).' }, + ], + }, + { + id: 'setup', + heading: 'Set up Cursor for design work, from zero', + blocks: [ + { kind: 'p', text: 'Here is the full path from a clean machine to a Cursor that can build, preview, and verify UI against your design system.' }, + { kind: 'ol', items: [ + 'Install Cursor from cursor.com and sign in with your Cursor account, or configure your own model keys (BYOK) in Settings.', + 'Open your project and pick a model in the chat / Agent panel.', + 'Add project rules: create `.cursor/rules/*.mdc` for structured, glob-scoped conventions, or a plain `AGENTS.md` for simple, readable instructions.', + 'Connect the Figma MCP server (optional) so the agent can read live design context.', + 'Run your dev server and use the in-editor preview to see and verify the UI as you iterate.', + ] }, + { kind: 'image', src: '/agents/cursor-design/cursor-design-setup-flow.webp', alt: 'Five-step setup flow: install, authenticate, configure rules, add skill, verify', caption: 'The setup sequence: install → authenticate → configure project rules → add a skill → enable preview verification.' }, + { kind: 'p', text: 'A minimal project-rules file makes the agent design to a brand instead of defaulting to a generic look. Put it where Cursor reads it every run:' }, + { kind: 'code', lang: 'markdown', code: '# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- Reuse existing design-system tokens and components; never hardcode hex or spacing.\n- At most two typefaces and one accent color.\n- Brand-first hierarchy; restrained motion. No hero cards, no oversized rounded corners.\n- Build responsive by default; verify desktop and mobile in the preview before finishing.' }, + { kind: 'steps', items: [ + { label: 'Encode your design rules', body: 'Put your tokens, primitives, and conventions in `.cursor/rules` or `AGENTS.md` and point Cursor at them, so output matches a brand instead of defaulting to a generic look.' }, + { label: 'Keep prompts small', body: 'Cursor’s tight loop rewards focused asks — iterate one component or state at a time and watch the preview between passes.' }, + ] }, + ], + }, + { + id: 'preview-workflow', + heading: 'The preview-to-UI workflow', + blocks: [ + { kind: 'p', text: 'The highest-leverage design loop with Cursor is turning a reference into working, responsive UI and iterating in the editor until it matches — watching the live preview the whole time instead of guessing.' }, + { kind: 'ol', items: [ + 'Start from the clearest visual references you have — and include multiple states (desktop and mobile, hover, empty, loading), not just one hero shot.', + 'Be specific in the prompt; vague prompts produce generic UI.', + 'Prepare a design system and tell Cursor where the tokens and canonical primitives live.', + 'Keep the in-editor preview open and your dev server running so each edit renders immediately at the breakpoints you care about.', + 'Iterate by comparing the rendered UI back to the references — and use direct element selection in the preview for small visual corrections.', + ] }, + { kind: 'p', text: 'Feed references by attaching an image to the chat, then prompt with concrete constraints:' }, + { kind: 'code', lang: 'text', code: 'Implement this design in React + Vite + Tailwind + TypeScript.\nReuse my existing design-system components and tokens.\nMatch spacing, layout, and hierarchy; make it responsive.\nKeep the preview open — verify desktop and mobile match the\nreferences and iterate until they do.' }, + { kind: 'p', text: 'Commit good iterations and revert bad ones (telling Cursor when you revert) so each pass builds on a clean base — the same discipline that keeps any agent loop from drifting.' }, + ], + }, + { + id: 'figma', + heading: 'Cursor + Figma: design ↔ code over MCP', + blocks: [ + { kind: 'p', text: 'Cursor connects to Figma through the official Figma MCP server, which gives the agent structured access to a live Figma file instead of a flat screenshot. That removes the guesswork from handoff.' }, + { kind: 'steps', items: [ + { label: 'Design → Code', body: 'Copy a frame’s link in Figma, paste it into Cursor, and ask it to implement the design. The MCP server exposes real design context — components, variables, layout data, tokens — so the generated code matches the source instead of approximating it.' }, + { label: 'Stay aligned', body: 'With design tokens, styles, and components used consistently in Figma (and Code Connect where available), Cursor’s output stays mapped to your real design system rather than re-inventing primitives.' }, + ] }, + { kind: 'p', text: 'Set the remote Figma MCP server up once and it is available to Cursor as first-class context. Because MCP is an open standard, the same server is reusable across Cursor, Claude Code, Codex, and VS Code — exactly the kind of portable, multi-agent capability Open Design is built to orchestrate.' }, + ], + }, + { + id: 'vs', + heading: 'Cursor vs Codex vs Claude Code for design', + blocks: [ + { kind: 'p', text: 'There is no single winner for design work — each agent has a different strength, and experienced teams stack them. A fair summary:' }, + { kind: 'table', columns: ['Agent', 'Design strength', 'Best for'], rows: [ + ['Cursor', 'Visual build-and-see loop with live in-editor preview and direct element editing', 'Tight iterate-and-watch UI work inside an IDE'], + ['Codex', 'Strong visual polish with a frontend skill; image understanding and sandboxed runs', 'Delegated async builds and portable AGENTS.md rules'], + ['Claude Code', 'Specific design decisions (hex, spacing, type) and codebase-aware UX', 'Frontend reasoning and large-context refactors'], + ] }, + { kind: 'p', text: 'The recurring community verdict is that taste comes from humans: all three default to a generic aesthetic without skills, references, and constraints. That is the real problem to solve — and it is design-tool-shaped, not model-shaped.' }, + ], + }, + { + id: 'pitfalls', + heading: 'Pitfalls, and how to avoid the “AI slop” look', + blocks: [ + { kind: 'p', text: 'The most common complaint about Cursor-generated design is that it looks generic — soft gradients, floating panels, oversized rounded corners, dramatic shadows, an Inter-and-purple vibe that “screams an AI made this.” Other reported issues include layouts that break on mobile and instructions leaking into UI copy.' }, + { kind: 'steps', items: [ + { label: 'Add a design skill', body: 'A curated aesthetic skill forces Cursor to commit to a real direction instead of the default look.' }, + { label: 'Use the preview to verify', body: 'Render and self-check across breakpoints in the in-editor preview so layouts do not silently break on mobile.' }, + { label: 'Supply tokens and references', body: 'Real design tokens and reference screenshots are the single biggest lever on output quality.' }, + { label: 'Encode rules in `.cursor/rules`', body: 'Put “no hero cards, max two typefaces, brand-first hierarchy” style rules where the agent reads them every run.' }, + ] }, + { kind: 'p', text: 'Notice that every mitigation is about giving the agent a curated design context. Maintaining that context by hand, per project, is the toil Open Design removes.' }, + ], + }, + { + id: 'open-design', + heading: 'Designing with Cursor inside Open Design', + blocks: [ + { kind: 'p', text: 'Open Design is the open-source design layer the workflow above keeps asking for. It treats Cursor as a first-party adapter and wraps it in a curated skill and design-system library, a structured render pipeline, and a local desktop UI — so the design context that makes Cursor good is there from the first run, not assembled by hand each time.' }, + { kind: 'ol', items: [ + 'Install Open Design and select Cursor as your agent.', + 'Authenticate with your Cursor account or your own model keys (BYOK) — credentials stay on your machine and are never proxied through us.', + 'Pick a design system and a skill, then generate decks, prototypes, and landing pages with consistent taste.', + 'Every artifact and DESIGN.md file lives in your own repo, not a hosted cloud.', + ] }, + { kind: 'p', text: 'Same Cursor agent, same key — plus a real, portable, open-source design workflow around it. It is local-first and Apache-2.0, so nothing about your work or your credentials leaves your machine.' }, + ], + }, + ], + faqTitle: 'Frequently asked questions', + faq: [ + { name: 'Can Cursor really do design work?', text: 'Yes — with a design skill, a design system, and real reference images in context, Cursor produces production-quality, responsive UI, and its in-editor preview lets you verify and refine it visually. Without that context it tends to default to a generic look, which is the gap Open Design fills.' }, + { name: 'Is this an official Cursor product?', text: 'No. Open Design is an independent open-source project that integrates Cursor as an agent. It complements Cursor with a local-first, open skill and design-system library.' }, + { name: 'Do I need a Cursor subscription to design with Cursor?', text: 'You can use a Cursor account / subscription or bring your own model keys (BYOK). Open Design never proxies your credentials either way — they are used directly by your agent.' }, + { name: 'Cursor or Claude Code for frontend design?', text: 'Both are strong. Claude Code is known for specific, codebase-aware design decisions; Cursor’s edge is its tight build-and-see loop with a live preview inside the editor. Many teams use both — Open Design lets you switch agents without changing your design workflow.' }, + { name: 'How do I connect Cursor to Figma?', text: 'Add the official Figma MCP server in Cursor, then paste a Figma frame link into the chat and ask Cursor to implement it. The server exposes real components, variables, and layout data so the generated code matches the source design.' }, + { name: 'How do I avoid the generic “AI slop” aesthetic?', text: 'Add a design skill, supply real design tokens and reference screenshots, encode brand rules in `.cursor/rules` or `AGENTS.md`, and verify across breakpoints in the preview. Open Design ships these as a curated library so you skip the per-project setup.' }, + { name: 'Is Open Design affiliated with Cursor or Anysphere?', text: 'No. Cursor is a product of Anysphere; Open Design is an independent open-source project that supports it as a first-party adapter. Cursor and Anysphere are trademarks of Anysphere, Inc.' }, + { name: 'Are my files and credentials safe?', text: 'Yes — Open Design is local-first. Your files, artifacts, and DESIGN.md stay in your own repo, and your Cursor or model credentials are used directly by your agent, never routed through Open Design servers.' }, + ], + ctaTitle: 'Design with Cursor, the open way.', + ctaBody: 'Bring your own Cursor account or model keys, keep every file local, and get a curated design library around the agent you already use.', + ctaActions: [ + { label: 'Use Cursor inside Open Design', href: '/quickstart/', variant: 'primary' }, + { label: 'Star on GitHub', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: 'Download the desktop app', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + hubLinkLabel: 'See all supported agents', + }, + aboutTitle: 'What is Cursor', + aboutBody: [ + 'Cursor is an AI-first code editor built on VS Code, with a built-in agent that edits across your whole project.', + 'Cursor shipped Design Mode — point at an element, sketch a change, or describe it in words, and Cursor edits the underlying React/Vue/Svelte source. Combined with Figma MCP servers, it has become a credible design-to-code surface.', + 'Open Design treats Cursor Agent as a first-party adapter so it can drive a structured, open-source design pipeline.', + ], + vendorLabel: 'Vendor', + vendor: 'Cursor (Anysphere)', + credentialLabel: 'Credential', + credential: 'Cursor account (uses your own provider keys)', + designTitle: 'Designing with Cursor', + designLead: + 'Cursor’s design ecosystem centers on visual editing and Figma interop:', + designPoints: [ + { label: 'Design Mode', body: 'Click, draw, or voice-describe a UI change and Cursor edits the source — visual editing backed by real code.' }, + { label: 'Figma → code', body: 'Figma MCP servers feed real layout and tokens to Cursor so it builds from the design, not a screenshot.' }, + { label: 'Bidirectional Figma', body: 'Some MCPs let Cursor read and modify Figma designs programmatically, not just consume them.' }, + { label: 'Design-to-code loop', body: 'The common pattern: draft in a visual tool, import to Cursor, then refine and extend with the agent.' }, + ], + linksTitle: 'Real-world resources', + linksLead: 'Announcements, tutorials, and tools for designing with Cursor:', + links: [ + { label: 'Cursor Design Mode announcement', href: 'https://x.com/cursor_ai/status/2062950344687272144', source: 'X · @cursor_ai' }, + { label: 'Cursor’s Design Mode (Visual Editing) explained', href: 'https://www.builder.io/blog/cursor-design-mode-visual-editing', source: 'Blog · Builder.io' }, + { label: 'Cursor for Designers — Figma to code', href: 'https://www.builder.io/blog/figma-to-cursor-for-designers', source: 'Blog · Builder.io' }, + { label: 'Framelink Figma-Context-MCP', href: 'https://github.com/GLips/Figma-Context-MCP', source: 'GitHub · GLips' }, + { label: 'cursor-talk-to-figma-mcp', href: 'https://github.com/grab/cursor-talk-to-figma-mcp', source: 'GitHub · Grab' }, + ], + withOdTitle: 'Cursor + Open Design', + withOdLead: + 'Open Design is the open-source design layer around Cursor: a curated skill and design-system library, a structured render pipeline, and a local desktop UI.', + withOdSteps: [ + 'Install Open Design and select Cursor Agent.', + 'Cursor uses your own provider keys — nothing is proxied through Open Design.', + 'Pick a design system and skill, then generate decks, prototypes, and landing pages with consistent taste.', + 'Everything stays in your repo, local-first.', + ], + withOdClosing: + 'Cursor’s agent, plus an open and portable design workflow.', + faqTitle: 'FAQ', + faq: [ + { name: 'Is Cursor good for design?', text: 'With Design Mode and Figma MCP it edits and builds UI well; from scratch it benefits from a design system. Open Design supplies one out of the box.' }, + { name: 'Does Open Design replace Cursor’s Design Mode?', text: 'No — it complements it. Open Design adds an open, curated design-system and skill library and a structured render pipeline on top of the agent.' }, + { name: 'Is Open Design affiliated with Cursor?', text: 'No. Cursor is a product of Anysphere; Open Design is an independent open-source project that integrates it as a first-party adapter.' }, + ], + ctaTitle: 'Design with Cursor, the open way.', + ctaBody: 'Star the repo, download the desktop app, or join the community to request an adapter.', + }, + opencode: { + title: 'OpenCode for design — Open Design', + description: + 'How people use OpenCode for UI and web design — design.md files, UI/UX skills, Figma MCP — and how Open Design turns OpenCode into a local-first, open-source design agent.', + breadcrumb: 'OpenCode', + label: 'Agent · OpenCode', + heading: 'OpenCode for design.', + lead: 'OpenCode is the open-source terminal AI coding agent. Designers bolt design skills and DESIGN.md files onto it to generate real UI. Open Design makes that a structured, open-source workflow — bring your provider keys, keep everything local.', + tldrTitle: 'TL;DR', + tldrBody: + 'OpenCode is a fully open-source coding agent; design is an emergent use via skills, design.md files, and Figma MCP. Open Design packages a curated design-system and skill library plus a desktop workflow around it — your keys, your repo.', + toc: ['What is OpenCode', 'Designing with OpenCode', 'Resources', 'With Open Design', 'FAQ'], + rich: { + heroCtaLead: + 'Open Design turns OpenCode into a local-first, open-source design agent — any model you choose with your own provider key, your files, a curated skill and design-system library around it.', + heroCtaActions: [ + { label: 'Use OpenCode inside Open Design', href: '/quickstart/', variant: 'primary' }, + { label: 'Star on GitHub', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: 'Download the desktop app', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + intro: [ + 'OpenCode is an open-source, terminal-first AI coding agent that is deliberately model-agnostic: you bring your own provider key and run whatever model you want behind the same workflow. That openness makes it a natural base for design work — but like every agent, it only produces good UI when you give it the right references, skills, and a verification loop. This is a practical, end-to-end guide to using OpenCode for UI, frontend, and design-system work, and to wiring it into a structured design workflow with Open Design.', + 'It covers what OpenCode actually is, why a model-agnostic open agent is a good fit for design, how to set it up from zero, the screenshot-to-UI loop, how AGENTS.md and MCP extend it, how it compares to Codex, Claude Code, and Cursor, the pitfalls that make AI output look generic, and how Open Design closes the gap as an open, local-first design layer — a natural pairing, since both projects are open-source and run on your own machine.', + ], + heroImage: { + src: '/agents/opencode-design/opencode-design-hero.webp', + alt: 'OpenCode design feedback loop: a terminal TUI agent, a browser rendering the UI, and a workspace, with a feedback arrow looping back', + caption: 'The core loop: OpenCode builds UI in the terminal, renders and verifies it in a real browser, and iterates against your references — on whatever model you choose.', + }, + tocLabel: 'On this page', + toc: [ + { id: 'what-is-opencode', label: 'What OpenCode actually is' }, + { id: 'why-design', label: 'Why an open, any-model agent fits design' }, + { id: 'setup', label: 'Set up OpenCode for design (from zero)' }, + { id: 'screenshot-workflow', label: 'The screenshot-to-UI workflow' }, + { id: 'extend', label: 'AGENTS.md, MCP, and shareable sessions' }, + { id: 'vs', label: 'OpenCode vs Codex vs Claude Code vs Cursor' }, + { id: 'pitfalls', label: 'Pitfalls and the “AI slop” look' }, + { id: 'open-design', label: 'Designing with OpenCode in Open Design' }, + { id: 'faq', label: 'FAQ' }, + ], + sections: [ + { + id: 'what-is-opencode', + heading: 'What OpenCode actually is', + blocks: [ + { kind: 'p', text: 'OpenCode is an open-source AI coding agent built for the terminal, maintained by the team behind SST (Anomaly Innovations). It reads your repository, runs commands, edits files, and talks to a large language model — but unlike vendor-bound agents, it does not ship its own model. You point it at whatever provider and model you want and bring your own key.' }, + { kind: 'p', text: 'It runs as a terminal UI (TUI), with a desktop app and IDE extensions on top of the same engine. Under the hood it uses a client/server architecture, so the agent that does the work is decoupled from the surface you drive it from. Two built-in agents — build and plan — toggle with the Tab key.' }, + { kind: 'steps', items: [ + { label: 'Model-agnostic', body: 'Models and providers come from models.dev, an open catalog. You configure them in opencode.json with a provider/model-id string and can disable providers you do not want loaded — so the same design workflow runs on Anthropic, OpenAI, Google, OpenRouter, local models, and more.' }, + { label: 'Instruction file', body: 'OpenCode reads an AGENTS.md file in your project (the cross-tool standard, also compatible with CLAUDE.md) for project rules — the natural place to encode your design conventions. Run /init to generate one.' }, + { label: 'Extensible', body: 'It supports LSP integration, MCP servers, themes, keybinds, and custom commands, plus shareable session links for collaboration.' }, + ] }, + { kind: 'ul', items: [ + 'Maintainer: SST / Anomaly Innovations (open-source project)', + 'Credential: your own model-provider API key(s) — BYOK, no vendor lock-in', + 'License: MIT, open source', + ] }, + ], + }, + { + id: 'why-design', + heading: 'Why an open, any-model agent fits design work', + blocks: [ + { kind: 'p', text: 'OpenCode does not have a single “design model” the way a vendor agent does — and that is the point. Because it is model-agnostic and open, you can run the same design workflow on whichever model is currently best at frontend, swap it later, or fall back to a local model, all without changing your setup.' }, + { kind: 'p', text: 'But model choice alone does not buy taste. Like every coding agent, OpenCode produces generic UI unless you give it constraints. Good design output comes from three inputs you provide.' }, + { kind: 'steps', items: [ + { label: 'A design system', body: 'Real tokens, primitives, and conventions the agent reuses, so output matches a brand instead of defaulting to a generic look.' }, + { label: 'An aesthetic skill', body: 'A curated skill that enforces real taste — restrained motion, brand-first hierarchy, at most two typefaces and one accent color — and makes the agent commit to a direction before building.' }, + { label: 'Concrete references', body: 'Actual reference images and multiple states (desktop and mobile, hover, empty, loading), not a single hero shot.' }, + ] }, + { kind: 'image', src: '/agents/opencode-design/opencode-design-taste-triangle.webp', alt: 'Diagram showing design system, skill, and reference image converging into good design output', caption: 'Taste comes from three inputs you provide: a design system, a skill, and real reference images — independent of which model you run.' }, + { kind: 'p', text: 'The lesson: OpenCode gives you model freedom, but taste still comes from a curated design context. Open Design packages exactly those inputs, which is why the two fit together — both are open-source and local-first (more below).' }, + ], + }, + { + id: 'setup', + heading: 'Set up OpenCode for design work, from zero', + blocks: [ + { kind: 'p', text: 'Here is the full path from a clean machine to an OpenCode that can build and verify UI.' }, + { kind: 'code', lang: 'bash', code: '# 1. Install OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# or: npm i -g opencode-ai@latest\n# or: brew install sst/tap/opencode\n\n# 2. Start the TUI in your project, then authenticate your provider\nopencode # then run /login and pick your provider + paste your key\n\n# 3. Generate project context\nopencode # inside your project, run /init to create AGENTS.md\n\n# 4. Pick your model (any provider, via models.dev)\n# set "provider/model-id" in opencode.json or switch in the TUI\n\n# 5. Add an MCP server (optional, e.g. for design handoff)\n# configure it under the "mcp" key in opencode.json' }, + { kind: 'image', src: '/agents/opencode-design/opencode-design-setup-flow.webp', alt: 'Five-step setup flow: install, authenticate with your provider key, configure AGENTS.md, add a skill, verify', caption: 'The setup sequence: install → authenticate (your provider key) → configure AGENTS.md → add a skill → verify in a real browser.' }, + { kind: 'steps', items: [ + { label: 'Encode your design rules', body: 'Put your tokens, primitives, and conventions in AGENTS.md (or a DESIGN.md referenced from it) so output matches a brand instead of defaulting to a generic look. The instructions option in opencode.json can point at additional rule files via globs.' }, + { label: 'Choose a capable model', body: 'Because OpenCode is model-agnostic, pick whichever provider/model is currently strongest at frontend for the design pass — and keep the rest of your workflow unchanged.' }, + ] }, + ], + }, + { + id: 'screenshot-workflow', + heading: 'The screenshot-to-UI workflow', + blocks: [ + { kind: 'p', text: 'The highest-leverage design loop with any agent is turning a reference image into working, responsive UI and iterating until it matches. The same five-step shape applies in OpenCode.' }, + { kind: 'ol', items: [ + 'Start from the clearest visual references you have — and include multiple states (desktop and mobile, hover, empty, loading), not just one hero shot.', + 'Be specific in the prompt; vague prompts produce generic UI.', + 'Prepare a design system and tell OpenCode where the tokens and canonical primitives live (in AGENTS.md).', + 'Run a dev server and have the agent render in a real browser, resizing to breakpoints to check the result.', + 'Iterate by having OpenCode compare its implementation back to the screenshots — not merely confirm it builds.', + ] }, + { kind: 'p', text: 'Reference files with @ in the TUI for a fuzzy search of your working directory, run shell commands inline with a leading !, and drive actions with / commands. Then prompt with concrete constraints:' }, + { kind: 'code', lang: 'bash', code: 'opencode\n# in the TUI:\n> @reference-desktop.png @reference-mobile.png\n Implement this design in React + Vite + Tailwind + TypeScript.\n Reuse my existing design-system components and tokens from AGENTS.md.\n Match spacing, layout, and hierarchy; make it responsive.\n Run the dev server, open it in a browser, and iterate until the\n UI matches the references across breakpoints.' }, + { kind: 'p', text: 'Keep prompts small and focused, commit good iterations and revert bad ones (telling OpenCode when you revert), so each pass builds on a clean base.' }, + ], + }, + { + id: 'extend', + heading: 'AGENTS.md, MCP, and shareable sessions', + blocks: [ + { kind: 'p', text: 'Three extension points make OpenCode practical for sustained design work, and all three map cleanly onto an open design workflow.' }, + { kind: 'steps', items: [ + { label: 'AGENTS.md rules', body: 'Project rules live in an AGENTS.md at the repo root (or global rules in ~/.config/opencode/AGENTS.md). It is the durable home for your design conventions, read on every run, and it is compatible with the CLAUDE.md files other agents use.' }, + { label: 'MCP servers', body: 'OpenCode supports both local (command) and remote (URL) MCP servers, configured under the mcp key — the portable way to bring in design context and external tools that work across agents, not just OpenCode.' }, + { label: 'Shareable sessions', body: 'The /share command creates a public link to a conversation for collaboration or review, and /unshare revokes it — useful for getting feedback on a design pass.' }, + ] }, + { kind: 'p', text: 'These are portable, multi-agent capabilities — exactly the kind of thing Open Design is built to orchestrate, rather than re-create per project.' }, + ], + }, + { + id: 'vs', + heading: 'OpenCode vs Codex vs Claude Code vs Cursor for design', + blocks: [ + { kind: 'p', text: 'There is no single winner for design work — each agent has a different strength, and experienced teams stack them. A fair summary:' }, + { kind: 'table', columns: ['Agent', 'Design strength', 'Best for'], rows: [ + ['OpenCode', 'Open-source and model-agnostic; run any provider behind one terminal workflow', 'BYOK freedom, model-switching, fully open and local-first setups'], + ['Codex', 'Strong visual polish with a frontend skill; image understanding', 'Delegated async, sandboxed builds, portable AGENTS.md rules'], + ['Claude Code', 'Specific design decisions (hex, spacing, type) and codebase-aware UX', 'Frontend reasoning and large-context refactors'], + ['Cursor', 'Visual build-and-see loop with live preview and inline edits', 'Tight iterate-and-watch UI work inside an IDE'], + ] }, + { kind: 'p', text: 'The recurring community verdict is that taste comes from humans: all of them default to a generic aesthetic without skills, references, and constraints. That is the real problem to solve — and it is design-tool-shaped, not model-shaped, which is precisely why an open agent like OpenCode pairs so well with an open design layer.' }, + ], + }, + { + id: 'pitfalls', + heading: 'Pitfalls, and how to avoid the “AI slop” look', + blocks: [ + { kind: 'p', text: 'The most common complaint about AI-generated design is that it looks generic — soft gradients, floating panels, oversized rounded corners, dramatic shadows, an Inter-and-purple vibe that “screams an AI made this.” Other reported issues include broken mobile layouts and instructions leaking into UI copy. None of these are unique to OpenCode; they are what happens when any agent runs without a curated design context.' }, + { kind: 'steps', items: [ + { label: 'Add an aesthetic skill', body: 'A curated design skill forces the agent to commit to a real direction instead of the default look.' }, + { label: 'Verify in a real browser', body: 'Render and self-check across breakpoints so layouts do not silently break on mobile.' }, + { label: 'Supply tokens and references', body: 'Real design tokens and reference screenshots are the single biggest lever on output quality.' }, + { label: 'Encode rules in AGENTS.md', body: 'Put “no hero cards, max two typefaces, brand-first hierarchy” style rules where the agent reads them every run.' }, + ] }, + { kind: 'p', text: 'Notice that every mitigation is about giving the agent a curated design context — regardless of which model you run. Maintaining that context by hand, per project, is the toil Open Design removes.' }, + ], + }, + { + id: 'open-design', + heading: 'Designing with OpenCode inside Open Design', + blocks: [ + { kind: 'p', text: 'Open Design is the open-source design layer the workflow above keeps asking for. It treats OpenCode as a first-party adapter and wraps it in a curated skill and design-system library, a structured render pipeline, and a local desktop UI — so the design context that makes any agent good is there from the first run, not assembled by hand each time. Both projects are open-source and local-first, which makes the pairing a natural fit.' }, + { kind: 'ol', items: [ + 'Install Open Design and select OpenCode as your agent.', + 'Authenticate with your own model-provider API key (BYOK) — credentials stay on your machine and are never proxied through us.', + 'Pick any provider and model, plus a design system and a skill, then generate decks, prototypes, and landing pages with consistent taste.', + 'Every artifact and DESIGN.md file lives in your own repo, not a hosted cloud.', + ] }, + { kind: 'p', text: 'Same OpenCode agent, same model freedom — plus a real, portable, open-source design workflow around it. It is local-first and Apache-2.0, so nothing about your work or your credentials leaves your machine.' }, + ], + }, + ], + faqTitle: 'Frequently asked questions', + faq: [ + { name: 'Can OpenCode really do design work?', text: 'Yes — with an aesthetic skill, a design system, and real reference images in context, OpenCode produces production-quality, responsive UI and can verify it in a browser. Because it is model-agnostic, you run whichever model is currently best at frontend. Without that curated context it tends to default to a generic look, which is the gap Open Design fills.' }, + { name: 'Which model should I use with OpenCode for design?', text: 'Whichever you like — OpenCode is provider-agnostic via models.dev, so you can run Anthropic, OpenAI, Google, OpenRouter, or local models behind the same workflow and switch at any time. The quality of the design output depends far more on your skill, design system, and references than on the model alone.' }, + { name: 'Is Open Design made by the OpenCode (SST) team?', text: 'No. Open Design is an independent open-source project that integrates OpenCode as an agent. It complements OpenCode with a local-first, open skill and design-system library.' }, + { name: 'Do I need a special subscription to design with OpenCode?', text: 'No — OpenCode is BYOK. You bring your own model-provider API key, and Open Design never proxies your credentials. There is no vendor lock-in.' }, + { name: 'OpenCode or Codex or Claude Code for frontend design?', text: 'All are strong, and many teams stack them. OpenCode’s edge is being fully open-source and model-agnostic; Codex excels at delegated, sandboxed builds; Claude Code is known for specific, codebase-aware design decisions. Open Design lets you switch agents without changing your design workflow.' }, + { name: 'How do I extend OpenCode for design context?', text: 'Encode rules in AGENTS.md, add MCP servers under the mcp key for portable tools and design context, and use shareable sessions for review. Open Design ships a curated skill and design-system library so you skip the per-project setup.' }, + { name: 'Is Open Design affiliated with OpenCode or SST?', text: 'No. OpenCode is an open-source project maintained by SST (Anomaly Innovations); Open Design is an independent open-source project that supports it as a first-party adapter.' }, + { name: 'Are my files and credentials safe?', text: 'Yes — Open Design is local-first. Your files, artifacts, and DESIGN.md stay in your own repo, and your model-provider credentials are used directly by your agent, never routed through Open Design servers.' }, + ], + ctaTitle: 'Design with OpenCode, the open way.', + ctaBody: 'Bring your own model-provider key, keep every file local, and get a curated design library around the open agent you already use.', + ctaActions: [ + { label: 'Use OpenCode inside Open Design', href: '/quickstart/', variant: 'primary' }, + { label: 'Star on GitHub', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: 'Download the desktop app', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + hubLinkLabel: 'See all supported agents', + }, + aboutTitle: 'What is OpenCode', + aboutBody: [ + 'OpenCode is an open-source (MIT) terminal AI coding agent — a TUI plus desktop and IDE surfaces — maintained by Anomaly (the SST team) at github.com/anomalyco/opencode.', + 'It is a coding agent, not a dedicated design tool. Design happens by adding skills, DESIGN.md system files, and Figma/visual-canvas MCPs to control its visual output.', + 'Open Design treats OpenCode as a first-party adapter, turning those ad-hoc patterns into a structured, open design pipeline.', + ], + vendorLabel: 'Vendor', + vendor: 'Anomaly (open-source, MIT)', + credentialLabel: 'Credential', + credential: 'Provider keys via OpenCode config (BYOK)', + designTitle: 'Designing with OpenCode', + designLead: + 'The OpenCode community designs by giving the agent taste through configuration and skills:', + designPoints: [ + { label: 'design.md systems', body: 'Drop a brand DESIGN.md (Stripe/Linear/Airbnb-style rules) into the project so OpenCode generates a matching UI.' }, + { label: 'UI/UX skills', body: 'Design-intelligence skills add dozens of UI styles and palettes, generating a design system before coding.' }, + { label: 'Figma & visual canvas MCP', body: 'Connect Figma or a visual canvas via MCP for a design-to-code loop.' }, + { label: 'Model taste', body: 'Because OpenCode is BYOK, you pick the model that designs best for your taste and budget.' }, + ], + linksTitle: 'Real-world resources', + linksLead: 'Skills, design.md collections, and tutorials for designing with OpenCode:', + links: [ + { label: 'OpenCode UI/UX skill: build better modern designs', href: 'https://www.youtube.com/watch?v=Pc27ThkuBPQ', source: 'YouTube · AI Stack Engineer' }, + { label: 'OpenCode + design.md: stunning designs for free', href: 'https://www.youtube.com/watch?v=sCu34s8zb4o', source: 'YouTube · AI Stack Engineer' }, + { label: 'VoltAgent/awesome-design-md', href: 'https://github.com/VoltAgent/awesome-design-md', source: 'GitHub · VoltAgent' }, + { label: 'anomalyco/opencode (canonical repo)', href: 'https://github.com/anomalyco/opencode', source: 'GitHub · Anomaly' }, + { label: 'OpenCode tutorial: setup, agents, skills & MCP', href: 'https://www.youtube.com/watch?v=uZGDO0L-Dr4', source: 'YouTube · Leon van Zyl' }, + ], + withOdTitle: 'OpenCode + Open Design', + withOdLead: + 'Open Design is the open-source design layer around OpenCode: a curated skill and design-system library, a structured render pipeline, and a local desktop UI — no more hand-assembling design.md files and skills.', + withOdSteps: [ + 'Install Open Design and select OpenCode as your agent.', + 'OpenCode uses your provider keys via its own config (BYOK) — nothing is proxied.', + 'Pick a design system and skill, then generate decks, prototypes, and landing pages with consistent taste.', + 'Both projects are open-source and local-first — your files never leave your machine.', + ], + withOdClosing: + 'Two open-source agents, one local-first design workflow.', + faqTitle: 'FAQ', + faq: [ + { name: 'Which OpenCode is this?', text: 'The open-source terminal agent at github.com/anomalyco/opencode (formerly sst/opencode), maintained by Anomaly. Not to be confused with similarly named tools.' }, + { name: 'Can OpenCode design UIs?', text: 'Yes, with design.md files and UI/UX skills in context. Open Design provides a curated library of both so you skip the manual setup.' }, + { name: 'Is Open Design the same project as OpenCode?', text: 'No. Both are open-source, but they are separate projects. Open Design integrates OpenCode as a first-party agent adapter.' }, + ], + ctaTitle: 'Design with OpenCode, the open way.', + ctaBody: 'Star the repo, download the desktop app, or join the community to request an adapter.', + }, + }, download: { title: 'Download Open Design — desktop app for macOS, Windows & Linux', description: @@ -1367,6 +2387,895 @@ INFO_PAGE_COPY.zh = { ctaTitle: '三条命令切换。', ctaBody: '给仓库点 Star、下载桌面版,或直接在终端安装。你的 DESIGN.md 系统从第一次渲染开始就留在自己的 repo。', }, + agentGuides: { + 'claude-code': { + ...INFO_PAGE_COPY.en!.agentGuides!['claude-code']!, + title: 'Claude Code 做设计 — Open Design', + description: + '设计师如何用 Claude Code 做 UI 和网页设计,以及 Open Design 如何把它变成真正的设计 Agent —— 本地优先、自带密钥(BYOK),配套精选 skill 与设计系统库。', + breadcrumb: 'Claude Code', + label: 'Agent · Claude Code', + heading: '用 Claude Code 做设计。', + lead: 'Claude Code 是 Anthropic 的终端编码 Agent。已经有很多人用它做 UI、设计系统和落地页。Open Design 把它接进真正的设计工作流 —— 用你自己的 Anthropic 密钥或 Claude 订阅,所有文件留在本地。', + tldrTitle: '一句话', + tldrBody: + '只要给 Claude Code「审美」—— 一套设计系统、一个风格 skill、一个截图迭代循环 —— 它就是个强力的设计生成器。Open Design 把这些做成本地优先的开源层。用你自己的密钥指向它,开始设计。', + toc: ['什么是 Claude Code', '用 Claude Code 做设计', '资源', '配合 Open Design', '常见问题'], + rich: { + heroCtaLead: + 'Open Design 把 Claude Code 变成一个本地优先、开源的设计 agent —— 用你自己的 Anthropic key 或 Claude 订阅、你自己的文件,外面再包一层精选的 skill 与设计系统库。', + heroCtaActions: [ + { label: '在 Open Design 里使用 Claude Code', href: '/quickstart/', variant: 'primary' }, + { label: '在 GitHub 上 Star', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: '下载桌面应用', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + intro: [ + 'Claude Code 被普遍认为是前端品味最好的 coding agent —— 它对界面的推理格外具体,会给出确切的 hex 色值、间距与字号阶梯,并能在大型代码库里跨文件重构 UI 而不丢失主线。但开箱即用时,如果你不给它设计系统、skill 和真实参考,它仍会滑向一种泛泛的样子。这是一份关于如何把 Claude Code 用于 UI、前端与设计系统工作,并将它接入 Open Design 结构化工作流的端到端实战指南。', + '本文涵盖 Claude Code 到底是什么、它为何擅长前端、如何从零搭建、CLAUDE.md 与 Skills 工作流、官方的 Figma 往返、它与 Codex 和 Cursor 的对比、让 AI 产出显得套路化的那些坑,以及 Open Design 如何作为开源、本地优先的设计层来补上这道缺口。', + ], + heroImage: { + src: '/agents/claude-code-design/claude-code-design-hero.webp', + alt: 'Claude Code 设计反馈闭环:终端里做出具体设计决策的 agent、渲染 UI 的浏览器,以及一个工作区,由一条反馈箭头回环', + caption: '核心闭环:Claude Code 在终端里推理出具体的 UI 决策,在真实浏览器里渲染并验证,再对照参考不断收敛。', + }, + tocLabel: '本页内容', + toc: [ + { id: 'what-is-claude-code', label: 'Claude Code 究竟是什么' }, + { id: 'why-design', label: 'Claude Code 为何擅长设计' }, + { id: 'setup', label: '从零搭建用于设计的 Claude Code' }, + { id: 'skills-workflow', label: 'CLAUDE.md 与 Skills 工作流' }, + { id: 'figma', label: 'Claude Code + Figma 往返' }, + { id: 'vs', label: 'Claude Code vs Codex vs Cursor' }, + { id: 'pitfalls', label: '常见坑与“AI 套路感”' }, + { id: 'open-design', label: '在 Open Design 里用 Claude Code 做设计' }, + { id: 'faq', label: '常见问题' }, + ], + sections: [ + { + id: 'what-is-claude-code', + heading: 'Claude Code 究竟是什么', + blocks: [ + { kind: 'p', text: 'Claude Code 是 Anthropic 的 agentic 编码工具。它读取你的代码库、编辑文件、运行命令、与你的开发工具集成 —— 从自然语言任务出发去规划、编写并验证,而不只是补全几行代码。' }, + { kind: 'p', text: '它有多个共享同一引擎的形态:终端 CLI、面向 VS Code / Cursor / JetBrains 的 IDE 扩展、带可视化 diff 审阅的桌面应用,以及用于长时任务的网页端。你的 CLAUDE.md 文件、设置与 MCP server 在所有形态间通用。' }, + { kind: 'steps', items: [ + { label: '指令文件', body: 'Claude Code 在每次会话开始时读取项目根目录下的 CLAUDE.md —— 这正是写入你的设计规范、token 与审阅清单的天然位置。' }, + { label: 'Skills', body: 'Agent Skills 把可复用的指令、脚本与资源打包,由 Claude 按需加载,其中就包括 Anthropic 官方的 Frontend Design skill 来注入品味。' }, + { label: 'Plan 与 subagent', body: '它能先规划再动手,并可派生 subagent 并行处理任务的不同部分,从而让大型 UI 重构保持连贯。' }, + ] }, + { kind: 'ul', items: [ + '厂商:Anthropic', + '凭证:Anthropic API key(BYOK,经 Console)或 Claude 订阅(Pro / Max)', + '形态:终端 CLI、VS Code / Cursor / JetBrains 扩展、桌面应用、网页端', + ] }, + ], + }, + { + id: 'why-design', + heading: 'Claude Code 为何擅长设计', + blocks: [ + { kind: 'p', text: '在一众 coding agent 里,Claude Code 在前端工作上以“有品味”著称。原因有几点。' }, + { kind: 'steps', items: [ + { label: '决策具体,不含糊', body: 'Claude Code 倾向于落到确切的选择 —— 精确的 hex 色值、间距阶梯、字号 ramp 与组件层级,而不是泛泛而谈,而这正是真实界面与占位草稿的分水岭。' }, + { label: '理解代码库的推理', body: '凭借较大的工作上下文,它能一次性跨多文件重构 UI,复用你已有的组件与 token,而不是另造一套一次性样式。' }, + { label: '官方前端 skill', body: 'Anthropic 提供 Frontend Design skill,让 Claude 先写出设计方向,并刻意避开泛用系统字体与可预料的紫色渐变。' }, + ] }, + { kind: 'image', src: '/agents/claude-code-design/claude-code-design-taste-triangle.webp', alt: '展示设计系统、skill 与参考图三者汇聚成优质设计产出的示意图', caption: '品味来自你提供的三项输入:设计系统、skill,以及真实参考图。' }, + { kind: 'p', text: '这和 Anthropic 对自家模型的说法一致:Claude 默认并没有品味 —— 放任不管,它会收敛到网页设计的统计中心(Inter、紫色渐变、柔和阴影)。给它约束,它才能产出好设计。Open Design 恰恰把这些输入打包好了,这也是两者天然契合之处(详见下文)。' }, + ], + }, + { + id: 'setup', + heading: '从零搭建用于设计工作的 Claude Code', + blocks: [ + { kind: 'p', text: '下面是从一台干净机器到一个能构建并验证 UI 的 Claude Code 的完整路径。' }, + { kind: 'code', lang: 'bash', code: '# 1. 安装 Claude Code(推荐原生安装)\ncurl -fsSL https://claude.ai/install.sh | bash\n# 或:brew install --cask claude-code\n# Windows PowerShell:irm https://claude.ai/install.ps1 | iex\n\n# 2. 在你的项目里启动,首次运行时登录\ncd your-project\nclaude # 用 Claude 订阅或 API key 登录\n\n# 3. 生成项目上下文\n/init # 为本项目创建 CLAUDE.md\n\n# 4. 添加官方 Frontend Design skill\nclaude plugin install frontend-design@claude-plugins-official\n\n# 5. 接入 Figma MCP server(可选,用于设计交付)\nclaude plugin install figma@claude-plugins-official' }, + { kind: 'image', src: '/agents/claude-code-design/claude-code-design-setup-flow.webp', alt: '五步搭建流程:安装、认证、配置 CLAUDE.md、添加 skill、验证', caption: '搭建顺序:安装 → 认证 → 配置 CLAUDE.md → 添加 Frontend Design skill → 启用浏览器验证。' }, + { kind: 'steps', items: [ + { label: '把设计规则写进去', body: '把你的 token、基础原语与约定放进 CLAUDE.md 并让 Claude 指向它们,这样产出会贴合品牌,而不是退回到泛用样子。' }, + { label: '加上浏览器验证', body: '接入 Playwright 或 Chrome MCP,让 Claude 在真实浏览器里渲染,并跨断点检查产出,而不仅仅确认构建通过。' }, + ] }, + ], + }, + { + id: 'skills-workflow', + heading: 'CLAUDE.md 与 Skills 工作流', + blocks: [ + { kind: 'p', text: '用 Claude Code 做设计、杠杆最高的闭环,是把真实参考连同你的设计上下文一起喂给它,再迭代到 UI 对得上 —— 由 CLAUDE.md 和 Skills 承载约束,免得你每次 prompt 都重新解释一遍。' }, + { kind: 'ol', items: [ + '从你手头最清晰的视觉参考出发 —— 而且要包含多种状态(桌面与移动、hover、空态、加载态),不要只给一张 hero 图。', + '在 prompt 里说具体;即便是强 agent,含糊的 prompt 也只会产出泛泛的 UI。', + '把你的设计系统与约定放进 CLAUDE.md,并告诉 Claude token 与标准原语在哪里。', + '添加 Frontend Design skill,让 Claude 在写代码前先确定一个真实的美学方向。', + '接好浏览器验证,让 Claude 渲染、调整到各断点,并对照参考做比对 —— 而不只是确认能构建通过。', + ] }, + { kind: 'p', text: '把一张参考图丢进会话,并用具体约束去提示:' }, + { kind: 'code', lang: 'bash', code: 'claude "把 reference-desktop.png 和 reference-mobile.png 用\n React + Vite + Tailwind + TypeScript 实现。\n 复用 CLAUDE.md 里描述的设计系统组件与 token。\n 匹配间距、布局与层级;做成响应式。\n 在浏览器里渲染,跨断点验证它与参考一致,\n 并迭代到对得上为止。"' }, + { kind: 'p', text: '同时跑一个 dev server,prompt 保持小而聚焦,好的迭代就 commit、坏的就 revert(revert 时告诉 Claude 一声),让每一轮都在干净的基础上推进。较大的重构用 plan 模式,这样动文件前你能先审一遍方案。' }, + ], + }, + { + id: 'figma', + heading: 'Claude Code + Figma:设计 ↔ 代码往返', + blocks: [ + { kind: 'p', text: '2026 年 2 月,Anthropic 与 Figma 通过 Figma MCP server 推出了一流的双向集成。它在两个方向都能用。' }, + { kind: 'steps', items: [ + { label: '设计 → 代码', body: '在 Figma 里选中一个 frame,或把链接粘进 Claude Code,拉取设计上下文,让它用你已有的组件库来实现这份设计。Code Connect 会让产出与你真实的组件保持对齐。' }, + { label: '代码 → 设计', body: '在浏览器里构建并预览一个功能,然后说一句“Send this to Figma”,把运行中的 UI 捕获为可编辑的 Figma 图层 —— 整屏或选中的某个元素皆可。' }, + ] }, + { kind: 'p', text: '用 claude plugin install figma@claude-plugins-official 安装一次即可(Dev Mode MCP 需要 Figma 付费方案)。同一个 Figma MCP 对 Claude Code、Codex、Cursor 与 VS Code 都可用 —— 正是 Open Design 所要编排的那类可移植、多 agent 能力。' }, + ], + }, + { + id: 'vs', + heading: 'Claude Code vs Codex vs Cursor 做设计', + blocks: [ + { kind: 'p', text: '设计工作没有唯一赢家 —— 每个 agent 各有所长,有经验的团队会把它们叠着用。一个公允的概括:' }, + { kind: 'table', columns: ['Agent', '设计强项', '最适合'], rows: [ + ['Claude Code', '具体的设计决策(hex、间距、字号)与理解代码库的 UX 推理', '前端推理与大上下文重构'], + ['Codex', '强视觉打磨与图像理解;沙箱化异步构建', '委派式异步构建与可移植的 AGENTS.md 规则'], + ['Cursor', '带实时预览与内联编辑的“边做边看”闭环', 'IDE 内紧凑的“迭代-观察”式 UI 工作'], + ] }, + { kind: 'p', text: '社区反复得出的结论是:品味来自人。三者在没有 skill、参考与约束时都会默认滑向泛用美学。这才是真正要解决的问题 —— 它是设计工具形状的,而非模型形状的。' }, + ], + }, + { + id: 'pitfalls', + heading: '常见坑,以及如何避开“AI 套路感”', + blocks: [ + { kind: 'p', text: '即便 Claude Code 以有品味著称,对 AI 生成设计最常见的吐槽仍是它显得套路 —— Inter 字体、白底上的紫色渐变、柔和阴影、过大的圆角,一种“一看就是 AI 做的”的观感。Anthropic 自己把这归因于分布收敛:安全的选择在网页训练数据里占主导。其他被反映的问题还包括移动端布局错乱、以及指令文字漏进了 UI 文案。' }, + { kind: 'steps', items: [ + { label: '装上 Frontend Design skill', body: '它会逼 Claude 确定一个真实方向,并明确避开被 AI 滥用的字体与渐变。' }, + { label: '启用浏览器验证', body: '让 Claude 渲染并跨断点自检,避免布局在移动端悄悄崩掉。' }, + { label: '提供 token 与参考', body: '真实的设计 token 与参考截图,是对产出质量影响最大的单一杠杆。' }, + { label: '把规则写进 CLAUDE.md', body: '把“不用 hero 卡片、最多两种字体、品牌优先的层级”这类规则,放在 agent 每次都会读到的地方。' }, + ] }, + { kind: 'p', text: '注意每一条缓解措施,本质都是在给 agent 一份精选的设计上下文。逐个项目手工维护这份上下文,正是 Open Design 替你省掉的苦差。' }, + ], + }, + { + id: 'open-design', + heading: '在 Open Design 里用 Claude Code 做设计', + blocks: [ + { kind: 'p', text: 'Open Design 就是上面那套工作流一直在呼唤的开源设计层。它把 Claude Code 当作一等适配器,并在外面包上一层精选的 skill 与设计系统库、一条结构化渲染流水线,以及一个本地桌面 UI —— 让那份令 Claude Code 出彩的设计上下文,从第一次运行就在位,而不必每次手工拼装。' }, + { kind: 'ol', items: [ + '安装 Open Design,并选择 Claude Code 作为你的 agent。', + '用你的 Anthropic API key(BYOK)或 Claude 订阅认证 —— 凭证留在你自己机器上,绝不经我们中转。', + '挑一套设计系统与一个 skill,然后产出风格一致的 deck、原型与落地页。', + '每一件产物与 DESIGN.md 文件都存在你自己的仓库里,而非托管云端。', + ] }, + { kind: 'p', text: '同一个 Claude Code agent、同一把 key —— 外加一套真实、可移植、开源的设计工作流。它本地优先、Apache-2.0,所以你的工作与凭证都不会离开你的机器。' }, + ], + }, + ], + faqTitle: '常见问题', + faq: [ + { name: 'Claude Code 适合做设计吗?', text: '适合 —— 它被普遍认为是前端品味最好的 coding agent,会对 hex 色值、间距与字号阶梯做出具体且理解代码库的决策。配上 Frontend Design skill、一套设计系统与真实参考图,它能产出生产级、响应式的 UI 并在浏览器里验证。缺了这份上下文,它就容易退回泛用样子 —— 这正是 Open Design 要补的缺口。' }, + { name: '用 Claude Code 做设计需要 Claude 订阅吗?', text: '你可以用 Anthropic API key(BYOK,经 Console)或 Claude 订阅(Pro / Max),两者皆可。无论哪种,Open Design 都不会中转你的凭证 —— 它们由你的 agent 在你机器上直接使用。' }, + { name: '前端设计该用 Claude Code 还是 Codex?', text: '两者都很强。Claude Code 以具体、理解代码库的设计决策与前端推理著称;Codex 视觉打磨强,擅长委派式的沙箱构建。很多团队两者都用 —— Open Design 让你切换 agent 而无需改动设计工作流。' }, + { name: '怎么把 Claude Code 接到 Figma?', text: '用 claude plugin install figma@claude-plugins-official 安装官方 Figma 插件。之后你就能借助设计上下文在代码里实现 Figma frame,并用“Send this to Figma”把运行中的 UI 推回成可编辑的 Figma 图层。Dev Mode MCP 需要 Figma 付费方案。' }, + { name: 'Skills 和 CLAUDE.md 是什么?', text: 'CLAUDE.md 是你项目根目录里的一个 markdown 文件,Claude Code 在每次会话开始时都会读它 —— 这是写入设计规范的地方。Skills 把可复用的指令与资源打包,由 Claude 按需加载,其中包括 Anthropic 官方的 Frontend Design skill。Open Design 把两者都做成精选库,帮你免去逐项目搭建。' }, + { name: '怎么避开泛用的“AI 套路感”?', text: '装上 Frontend Design skill,提供真实的设计 token 与参考截图,把品牌规则写进 CLAUDE.md,并启用浏览器验证。Open Design 把这些做成精选库,帮你免去逐项目搭建。' }, + { name: 'Open Design 和 Anthropic 有从属关系吗?', text: '没有。Claude Code 是 Anthropic 的产品;Open Design 是一个独立的开源项目,把它作为一等适配器来支持。Claude 与 Claude Code 是 Anthropic 的商标。' }, + { name: '我的文件和凭证安全吗?', text: '安全 —— Open Design 本地优先、Apache-2.0。你的文件、产物与 DESIGN.md 都留在你自己的仓库里,你的 Anthropic 凭证由你的 agent 直接使用,绝不经 Open Design 服务器中转。' }, + ], + ctaTitle: '用开放的方式,和 Claude Code 一起做设计。', + ctaBody: '带上你自己的 Anthropic key 或 Claude 订阅,把每个文件都留在本地,再给你已在用的 agent 包上一层精选设计库。', + ctaActions: [ + { label: '在 Open Design 里使用 Claude Code', href: '/quickstart/', variant: 'primary' }, + { label: '在 GitHub 上 Star', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: '下载桌面应用', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + hubLinkLabel: 'See all supported agents', + }, + aboutTitle: '什么是 Claude Code', + aboutBody: [ + 'Claude Code 是 Anthropic 的命令行 Agent:你用自然语言描述任务,它在你的项目里读写、运行代码,直到任务完成。', + '它是编码 Agent,不是设计工具 —— 但设计是它最强的衍生用途之一。给足 skill 和设计系统上下文后,它能生成生产级 HTML/CSS/React,按截图迭代,维护设计 token。', + 'Open Design 把 Claude Code 作为一方适配器,让你写代码的同一个 Agent,成为结构化设计工作流背后的引擎。', + ], + vendorLabel: '厂商', + vendor: 'Anthropic', + credentialLabel: '凭据', + credential: 'Anthropic API key(BYOK)或 Claude 订阅', + designTitle: '用 Claude Code 做设计', + designLead: + '社区已经摸索出几种范式,让 Claude Code 从通用代码生成器变成有真正设计判断力的工具:', + designPoints: [ + { label: '先给设计系统', body: '把 DESIGN.md / token / Tailwind 配置放进项目,让输出贴合品牌,而不是默认输出「AI 味」。' }, + { label: '审美 skill', body: 'Anthropic 的 frontend-design 这类 skill 会让它在写任何代码前先锁定排版/配色/动效方向。' }, + { label: 'Figma → 代码', body: '接入 Figma MCP,Claude Code 就能把 frame 转成带真实 token 的生产组件。' }, + { label: '截图循环', body: '让它给自己的 UI 截图、对照参考图、反复迭代 —— Agent 式的设计反馈闭环。' }, + ], + linksTitle: '实战资源', + linksLead: '大家真正在用来用 Claude Code 做设计的教程、skill 和实录:', + withOdTitle: 'Claude Code + Open Design', + withOdLead: + 'Open Design 正是 Claude Code 缺的那层设计能力:精选的 skill 与设计系统库、结构化的渲染流水线、一个桌面 UI —— 全开源、本地优先。', + withOdSteps: [ + '安装 Open Design,选 Claude Code 作为你的 Agent。', + '用你自己的 Anthropic API key(BYOK)或 Claude 订阅鉴权 —— 不经过我们中转。', + '选一套设计系统和一个 skill,生成审美一致的 deck、原型和落地页。', + '所有产物和 DESIGN.md 都留在你自己的 repo。', + ], + withOdClosing: '同一个 Agent、同一个密钥 —— 外加一套真正的设计工作流。', + faqTitle: '常见问题', + faq: [ + { name: 'Claude Code 真能做设计吗?', text: '能。给它设计系统和审美 skill 上下文,它就能生成生产级 UI。Open Design 把这两样开箱即用地配好,省去你搭环境。' }, + { name: '需要 Claude 订阅吗?', text: 'Anthropic API key(BYOK)或 Claude 订阅都行。Open Design 从不中转你的凭据。' }, + { name: '这是 Anthropic 官方产品吗?', text: '不是。Open Design 是独立的开源项目。Claude Code 是 Anthropic 的商标,我们以一方适配器的方式集成它。' }, + ], + ctaTitle: '用开源的方式,跟 Claude Code 一起设计。', + ctaBody: '给仓库点 Star、下载桌面版,或加入社区申请新适配器。', + }, + codex: { + ...INFO_PAGE_COPY.en!.agentGuides!.codex!, + title: 'Codex 做设计 — Open Design', + description: + '大家如何用 OpenAI Codex 做 UI 和网页设计 —— Product Design 插件、Figma 集成、前端 skill —— 以及 Open Design 如何把 Codex 变成本地优先的开源设计 Agent。', + breadcrumb: 'Codex', + label: 'Agent · Codex', + heading: '用 Codex 做设计。', + lead: 'Codex 是 OpenAI 的编码 Agent。靠 Product Design 插件和 Figma 集成,它已经成了一个正经的设计工具。Open Design 把 Codex 接进开源设计工作流 —— 你自己的 OpenAI 密钥或 ChatGPT 订阅,你自己的文件,本地优先。', + tldrTitle: '一句话', + tldrBody: + 'Codex 能把截图和用户故事变成响应式 UI,还能把设计往返同步到 Figma。Open Design 给它配上精选的设计系统与 skill 库,外加桌面工作流 —— 自带密钥,所有东西留在本地。', + toc: ['什么是 Codex', '用 Codex 做设计', '资源', '配合 Open Design', '常见问题'], + rich: { + heroCtaLead: + 'Open Design 把 Codex 变成本地优先的开源设计 Agent —— 你自己的 OpenAI 密钥、你自己的文件,外加一套围绕它的精选 skill 与设计系统库。', + heroCtaActions: [ + { label: '在 Open Design 里用 Codex', href: '/quickstart/', variant: 'primary' }, + { label: '给 GitHub 点 Star', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: '下载桌面客户端', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + intro: [ + 'Codex 最初只是个代码生成器,但到 2026 年,只要你给对参考、skill 和验证回路,它已经能设计出真正可用的界面。这是一篇端到端的实操指南:怎么用 Codex 做 UI、前端和设计系统,以及怎么用 Open Design 把它接进结构化的设计工作流。', + '内容覆盖:Codex 现在到底是什么、为什么它突然擅长前端、怎么从零配好、截图转 UI 的回路、官方的 Figma 双向打通、它跟 Cursor 与 Claude Code 的差异、让 AI 输出显得千篇一律的那些坑,以及 Open Design 作为开源、本地优先的设计层怎么补上缺口。', + ], + heroImage: { + src: '/agents/codex-design/codex-design-workflow-loop.webp', + alt: 'Codex 设计反馈回路:终端 Agent、浏览器渲染 UI、工作区,带一条回流箭头', + caption: '核心回路:Codex 在终端里构建 UI,在真实浏览器里渲染并验证,再对着你的参考图迭代。', + }, + tocLabel: '本页内容', + toc: [ + { id: 'what-is-codex', label: 'Codex 到底是什么' }, + { id: 'why-design', label: '为什么 Codex 现在能做设计' }, + { id: 'setup', label: '从零配好 Codex 做设计' }, + { id: 'screenshot-workflow', label: '截图转 UI 的工作流' }, + { id: 'figma', label: 'Codex + Figma 双向打通' }, + { id: 'vs', label: 'Codex vs Cursor vs Claude Code' }, + { id: 'pitfalls', label: '常见坑与「AI 味」' }, + { id: 'open-design', label: '在 Open Design 里用 Codex' }, + { id: 'faq', label: '常见问题' }, + ], + sections: [ + { + id: 'what-is-codex', + heading: 'Codex 到底是什么(以及不是什么)', + blocks: [ + { kind: 'p', text: '先消歧,几乎每个搜「Codex」的人都会被绊一下。最早的 OpenAI Codex 是 2021 年的代码补全模型,驱动过早期 GitHub Copilot,2023 年已弃用。本文讲的不是它。今天的 Codex 是 OpenAI 的 Agent 式编码工具 —— 从自然语言任务出发,规划、编写、运行并验证代码。' }, + { kind: 'p', text: '现代 Codex 有四种形态:终端 CLI(用 Rust 重写、Apache-2.0 开源)、面向 VS Code / Cursor / Windsurf 的 IDE 扩展、用于异步委派任务的云端/网页版,以及带内置浏览器和 Computer Use 的桌面 App。' }, + { kind: 'steps', items: [ + { label: '默认模型', body: '截至 2026 年中,推荐模型是 gpt-5.5;而 gpt-5.4 是 OpenAI 明确为前端和 Computer Use 训练的那个模型。' }, + { label: '指令文件', body: 'Codex 读取项目里的 AGENTS.md(跨工具通用标准)作为项目规则 —— 也就是写你设计约定最自然的地方。' }, + { label: '沙箱', body: '它跑在内核级沙箱里(默认 workspace-write),改你 UI 的 Agent 不会跑到项目之外乱动。' }, + ] }, + { kind: 'ul', items: [ + '厂商:OpenAI', + '凭据:OpenAI API key(BYOK)或 ChatGPT 订阅(Free / Go / Plus / Pro / Business / Enterprise)', + 'CLI 许可:Apache-2.0,开源', + ] }, + ], + }, + { + id: 'why-design', + heading: '为什么 Codex 现在能做设计', + blocks: [ + { kind: 'p', text: '2026 年初有三件事凑到一起,才让 Codex 从通用代码生成器变成真正的设计工具。' }, + { kind: 'steps', items: [ + { label: '一个为前端训练的模型', body: 'OpenAI 发布了 GPT-5.4 —— 它第一个主线版为前端和 Computer Use 训练的模型,对设计流程里的图像理解大幅提升,自我验证也更强,甚至能在定稿前先生成情绪板和多个视觉方案。' }, + { label: '一个官方前端 skill', body: 'openai/skills 目录里有一个精选 frontend-skill,强制真审美:无卡片布局、整屏 hero、品牌优先的层级、克制的动效、最多两种字体加一个强调色 —— 还逼 Codex 先写「视觉论点」再动手。' }, + { label: '浏览器验证', body: '配上 Playwright skill,Codex 会真开浏览器、按断点缩放,并把输出跟参考图比对,而不只是「构建通过」就完事。' }, + ] }, + { kind: 'image', src: '/agents/codex-design/codex-design-taste-triangle.webp', alt: '设计系统、skill、参考图三者汇聚成优质设计输出的示意图', caption: '审美来自你提供的三种输入:设计系统、skill 和真实参考图。' }, + { kind: 'p', text: '三件事背后的道理是一样的:Codex 默认没有审美。只有当你给它约束 —— 设计系统、审美 skill、具体参考 —— 它才能产出好设计。Open Design 打包的正是这三种输入,这也是两者契合的原因(下文详述)。' }, + ], + }, + { + id: 'setup', + heading: '从零配好 Codex 做设计', + blocks: [ + { kind: 'p', text: '从一台干净的机器,到一个能构建并验证 UI 的 Codex,完整路径如下。' }, + { kind: 'code', lang: 'bash', code: '# 1. 安装 Codex CLI\nnpm install -g @openai/codex\n# 或:brew install --cask codex\n# 或:curl -fsSL https://chatgpt.com/codex/install.sh | sh\n\n# 2. 鉴权(推荐用 ChatGPT 登录,额度更高)\ncodex # 然后选 “Sign in with ChatGPT”\n\n# 3. 生成项目上下文\ncodex # 在项目里运行 /init 生成 AGENTS.md\n\n# 4. 装官方前端 skill,然后重启 Codex\n# (在 Codex App 里)$skill-installer frontend-skill\n\n# 5. 接 Figma MCP server(可选,做设计交付)\ncodex mcp add figma --url https://mcp.figma.com/mcp' }, + { kind: 'image', src: '/agents/codex-design/codex-design-setup-flow.webp', alt: '五步配置流程:安装、鉴权、配置、装 skill、验证', caption: '配置顺序:安装 → 鉴权 → 配 AGENTS.md → 装前端 skill → 开浏览器验证。' }, + { kind: 'steps', items: [ + { label: '把设计规则写进去', body: '把 token、基础组件、约定写进 AGENTS.md 或 DESIGN.md 并让 Codex 指向它们,输出就会贴合品牌,而不是退回那套通用样子。' }, + { label: '选对推理档位', body: 'OpenAI 提到:低到中等推理档位的前端效果,往往比最高档更好。' }, + ] }, + ], + }, + { + id: 'screenshot-workflow', + heading: '截图转 UI 的工作流', + blocks: [ + { kind: 'p', text: 'Codex 做设计最高杠杆的回路,是把参考图变成可用的响应式 UI,再迭代到对齐为止。OpenAI 官方指引归纳为五步。' }, + { kind: 'ol', items: [ + '从你手头最清晰的视觉参考出发 —— 而且要包含多个状态(桌面和移动、hover、空态、加载态),不只是一张 hero 图。', + 'prompt 要具体;含糊的 prompt 只会产出通用 UI。', + '准备好设计系统,并告诉 Codex token 和基础组件在哪。', + '开启 Playwright 交互 skill,让 Codex 真在浏览器里渲染并按断点缩放。', + '迭代时让 Codex 把实现跟截图比对 —— 而不只是确认「能构建」。', + ] }, + { kind: 'p', text: '喂图可以把截图拖进终端,或用 image 参数,然后用具体约束来 prompt:' }, + { kind: 'code', lang: 'bash', code: 'codex -i reference-desktop.png -i reference-mobile.png \\\n "用 React + Vite + Tailwind + TypeScript 实现这个设计。\n 尽量复用我现有的设计系统组件和 token。\n 对齐间距、布局和层级;做成响应式。\n 用 Playwright skill 验证 UI 跟参考图一致,\n 不一致就一直迭代。"' }, + { kind: 'p', text: '在第二个终端里跑 dev server,prompt 保持小而聚焦,好的迭代就 commit、坏的就 revert(并告诉 Codex 你回退了),这样每一轮都在干净的基础上推进。' }, + ], + }, + { + id: 'figma', + heading: 'Codex + Figma:设计 ↔ 代码双向打通', + blocks: [ + { kind: 'p', text: '2026 年 2 月 OpenAI 和 Figma 宣布官方合作,把早先的 Figma MCP beta 升级成一等公民级的双向集成。两个方向都能走。' }, + { kind: 'steps', items: [ + { label: '设计 → 代码', body: '在 Figma 里复制某个 frame 的「link to selection」,粘进 Codex 配合 get_design_context,让它用你现有的组件库实现这个设计。' }, + { label: '代码 → 设计', body: 'generate_figma_design 工具(「Code to Canvas」)能把跑起来的 UI 变回可编辑的 Figma frame —— 整屏、选中元素或整个文件都行。' }, + ] }, + { kind: 'p', text: 'Figma MCP 以远程 server 形式运行且免限流。接一次,Codex、Claude Code、Cursor、VS Code 等都能用 —— 这种可移植的多 Agent 能力,正是 Open Design 要编排的东西。' }, + ], + }, + { + id: 'vs', + heading: 'Codex vs Cursor vs Claude Code 做设计', + blocks: [ + { kind: 'p', text: '做设计没有唯一赢家 —— 每个 Agent 强在不同地方,老手会叠着用。公允的总结:' }, + { kind: 'table', columns: ['Agent', '设计强项', '最适合'], rows: [ + ['Codex', 'GPT-5.4 + 前端 skill 之后视觉打磨很强;图像理解好', '异步委派构建、沙箱化运行、可移植的 AGENTS.md 规则'], + ['Cursor', '边改边看的视觉回路,带实时预览和行内编辑', 'IDE 里贴身迭代、即时观察的 UI 工作'], + ['Claude Code', '具体的设计决策(hex、间距、字体)和懂代码库的 UX', '前端推理和大上下文重构'], + ] }, + { kind: 'p', text: '社区反复得出的结论是:审美来自人。三者在没有 skill、参考和约束时,都会退回通用样子。这才是要解决的真问题 —— 而它是「设计工具」形状的,不是「模型」形状的。' }, + ], + }, + { + id: 'pitfalls', + heading: '常见坑,以及怎么避开「AI 味」', + blocks: [ + { kind: 'p', text: '对 Codex 生成设计最常见的吐槽是「显得通用」—— 柔和渐变、漂浮面板、超大圆角、夸张阴影,那种 Inter 字体加紫色的味道,「一看就是 AI 做的」。其他常见问题还有移动端布局崩、指令文案泄漏进 UI、以及很快撞到用量上限。' }, + { kind: 'steps', items: [ + { label: '装一个前端 skill', body: '精选的审美 skill 逼 Codex 选定一个真方向,而不是默认那套样子。' }, + { label: '开启 Playwright 验证', body: '让 Codex 跨断点渲染并自检,布局就不会在移动端悄悄崩。' }, + { label: '喂 token 和参考', body: '真实的设计 token 和参考截图,是对输出质量影响最大的那个杠杆。' }, + { label: '把规则写进 AGENTS.md', body: '把「不要 hero 卡片、最多两种字体、品牌优先层级」这类规则放在 Agent 每次都会读到的地方。' }, + ] }, + { kind: 'p', text: '注意:每条缓解措施,本质都是给 Agent 一套精选的设计上下文。而逐个项目手工维护这套上下文,正是 Open Design 帮你省掉的苦活。' }, + ], + }, + { + id: 'open-design', + heading: '在 Open Design 里用 Codex', + blocks: [ + { kind: 'p', text: 'Open Design 就是上面这套工作流一直在呼唤的那个开源设计层。它把 Codex 当作一方适配器,外面包上精选的 skill 与设计系统库、结构化渲染流水线、本地桌面 UI —— 让那些让 Codex 变好的设计上下文从第一次运行就在,而不是每次手工拼。' }, + { kind: 'ol', items: [ + '安装 Open Design,选 Codex 作为你的 Agent。', + '用 OpenAI API key(BYOK)或 ChatGPT 订阅鉴权 —— 凭据留在你机器上,绝不经我们中转。', + '选一套设计系统和一个 skill,生成审美一致的 deck、原型和落地页。', + '每个产物和 DESIGN.md 都在你自己的 repo 里,不在托管云端。', + ] }, + { kind: 'p', text: '同一个 Codex Agent、同一把密钥 —— 外加一套真正可移植的开源设计工作流。它本地优先、Apache-2.0,你的工作和凭据都不离开你的机器。' }, + ], + }, + ], + faqTitle: '常见问题', + faq: [ + { name: 'OpenAI Codex 真的能做设计吗?', text: '能 —— 只要上下文里有前端 skill、设计系统和真实参考图,Codex(尤其在 GPT-5.4 上)能产出生产级、响应式的 UI,还能在浏览器里自检。没有这套上下文它就会退回通用样子,而这正是 Open Design 补的缺口。' }, + { name: '这是 OpenAI 的 Codex Product Design 插件吗?', text: '不是。Open Design 是独立开源项目,把 Codex 作为 Agent 集成,用本地优先的开源 skill 与设计系统库补充官方工具。' }, + { name: '用 Codex 做设计需要 ChatGPT 订阅吗?', text: 'OpenAI API key(BYOK)或 ChatGPT 订阅都行。ChatGPT 登录通常额度更高;无论哪种,Open Design 都不中转你的凭据。' }, + { name: '前端设计该用 Codex 还是 Claude Code?', text: '两个都强。Claude Code 以具体、懂代码库的设计决策见长;Codex 在 GPT-5.4 之后视觉打磨很强,且擅长沙箱化的异步委派构建。很多团队两个都用 —— Open Design 让你换 Agent 时不用换设计工作流。' }, + { name: '怎么把 Codex 接到 Figma?', text: '加上官方 Figma MCP server(codex mcp add figma --url https://mcp.figma.com/mcp)。之后用 get_design_context 把 Figma frame 实现成代码,用 generate_figma_design 把跑起来的 UI 推回可编辑的 Figma frame。' }, + { name: '怎么避免那种通用的「AI 味」审美?', text: '装一个前端 skill、喂真实的设计 token 和参考截图、把品牌规则写进 AGENTS.md、并开启 Playwright 验证。Open Design 把这些做成精选库,你就省掉了逐项目的配置。' }, + { name: 'Open Design 跟 OpenAI 有关联吗?', text: '没有。Codex 是 OpenAI 的产品;Open Design 是独立开源项目,以一方适配器的方式支持它。OpenAI 和 Codex 是 OpenAI 的商标。' }, + { name: '我的文件和凭据安全吗?', text: '安全 —— Open Design 本地优先。你的文件、产物和 DESIGN.md 都留在自己的 repo,OpenAI 凭据由你的 Agent 直接使用,绝不经 Open Design 服务器中转。' }, + ], + ctaTitle: '用开源的方式,跟 Codex 一起设计。', + ctaBody: '自带 OpenAI 密钥、所有文件留在本地,给你已经在用的 Agent 配上一套精选设计库。', + ctaActions: [ + { label: '在 Open Design 里用 Codex', href: '/quickstart/', variant: 'primary' }, + { label: '给 GitHub 点 Star', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: '下载桌面客户端', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + hubLinkLabel: '查看全部支持的 Agent', + }, + aboutTitle: '什么是 Codex', + aboutBody: [ + 'Codex 是 OpenAI 的 Agent 式编码系统 —— 一个 CLI 加 ChatGPT 集成的 Agent,从自然语言任务规划、写、跑代码。', + 'OpenAI 现在提供面向角色的 Product Design 插件和 Figma 集成,Codex 可以探索方向、审查用户流程、从在线 URL 出原型,并导出到 Figma 或 Canva。', + 'Open Design 把 Codex 作为一方适配器,让它嵌入结构化的开源设计流水线。', + ], + vendorLabel: '厂商', + vendor: 'OpenAI', + credentialLabel: '凭据', + credential: 'OpenAI API key(BYOK)或 ChatGPT 订阅', + designTitle: '用 Codex 做设计', + designLead: + 'Codex 的设计能力在 2026 年快速成型,主要围绕几项官方和社区能力:', + designPoints: [ + { label: 'Product Design 插件', body: 'OpenAI 的角色插件:探索方向、审查用户流程、从在线 URL 出原型、把截图变可交互、导出 Figma/Canva。' }, + { label: '截图 → 响应式 UI', body: 'Codex 把参考图变成响应式代码,并用 Playwright skill 在各断点上跟参考图做视觉比对。' }, + { label: 'Codex ↔ Figma', body: 'Figma MCP 把设计上下文带进代码,再把运行中的 UI 变回可编辑的 Figma frame。' }, + { label: '前端设计 skill', body: '社区和官方 skill 锁定审美方向,避免输出千篇一律的「紫色 AI 味」。' }, + ], + linksTitle: '实战资源', + linksLead: '用 Codex 做设计的官方文档、Figma 集成和实录:', + withOdTitle: 'Codex + Open Design', + withOdLead: + 'Open Design 是围绕 Codex 的开源设计层:精选 skill 与设计系统库、结构化渲染流水线、本地桌面 UI。', + withOdSteps: [ + '安装 Open Design,选 Codex 作为你的 Agent。', + '用 OpenAI API key(BYOK)或 ChatGPT 订阅鉴权 —— 凭据留在你机器上。', + '选一套设计系统和 skill,生成审美一致的 deck、原型和落地页。', + '产物和 DESIGN.md 都在你自己的 repo,不在托管云端。', + ], + withOdClosing: '同一个 Codex Agent —— 外加一套真正可移植的设计工作流。', + faqTitle: '常见问题', + faq: [ + { name: '这是 OpenAI 的 Codex Product Design 插件吗?', text: '不是。Open Design 是独立开源项目,把 Codex 作为 Agent 集成,用本地优先的开源库补充官方插件。' }, + { name: '需要 ChatGPT 订阅吗?', text: 'OpenAI API key(BYOK)或 ChatGPT 订阅都行。Open Design 从不中转你的凭据。' }, + { name: 'Open Design 跟 OpenAI 有关联吗?', text: '没有。Codex 是 OpenAI 的产品;Open Design 是独立开源项目,以一方适配器的方式支持它。' }, + ], + ctaTitle: '用开源的方式,跟 Codex 一起设计。', + ctaBody: '给仓库点 Star、下载桌面版,或加入社区申请新适配器。', + }, + cursor: { + ...INFO_PAGE_COPY.en!.agentGuides!.cursor!, + title: 'Cursor 做设计 — Open Design', + description: + '设计师如何用 Cursor 做 UI 和网页设计 —— Design Mode、Figma 转代码、Figma MCP —— 以及 Open Design 如何把 Cursor 变成本地优先的开源设计 Agent。', + breadcrumb: 'Cursor', + label: 'Agent · Cursor', + heading: 'Cursor 给设计师。', + lead: 'Cursor 是那个 AI 代码编辑器,现在带了可视化 Design Mode。设计师用它点选、勾画来改 UI,也用它把 Figma 转成代码。Open Design 把 Cursor Agent 接进开源设计工作流,文件全留本地。', + tldrTitle: '一句话', + tldrBody: + 'Cursor 的 Design Mode 让你点击、勾画或用说话来改在线 UI;它的 Figma MCP 集成把真实设计上下文带进代码。Open Design 在上面叠一层精选 skill 与设计系统库 —— 你自己的模型密钥,你自己的 repo。', + toc: ['什么是 Cursor', '用 Cursor 做设计', '资源', '配合 Open Design', '常见问题'], + rich: { + heroCtaLead: + 'Open Design 把 Cursor 变成一个本地优先、开源的设计 agent——用你自己的 Cursor 账号或模型密钥、你自己的文件,外面再裹一层精选的 skill 与 design-system 库。', + heroCtaActions: [ + { label: '在 Open Design 里使用 Cursor', href: '/quickstart/', variant: 'primary' }, + { label: '在 GitHub 上 Star', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: '下载桌面端', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + intro: [ + 'Cursor 是一款 AI 优先的代码编辑器,它让“边写边看渲染”成为做 UI 的默认方式。借助 Agent 模式、行内编辑、编辑器内置预览,以及通过 MCP 接入的 Figma,它已经成为一个真正能用的设计工具——前提是你给它对的参考、规则和一套验证回路。这是一份从头到尾、可落地的指南,讲如何用 Cursor 做 UI、前端和 design-system 工作,并把它接入 Open Design 的结构化设计工作流。', + '内容涵盖:Cursor 到底是什么、为什么它“边迭代边看”的紧凑回路适合做设计、如何从零搭起、从预览到 UI 的迭代回路、通过 MCP 与 Figma 的往返、它与 Codex 和 Claude Code 的对比、让 AI 产出显得平庸的那些坑,以及 Open Design 作为开源、本地优先的设计层如何补齐这道缺口。', + ], + heroImage: { + src: '/agents/cursor-design/cursor-design-hero.webp', + alt: 'Cursor 设计收敛示意:左侧是编辑器,中间是带 Cursor 标志的精选 skill 与 design-system hub,右侧是渲染出的 UI', + caption: '核心思路:Cursor 在编辑器里编辑并渲染 UI,而一个精选的设计 hub 为它喂入设计系统、skill 和参考,让产出显得是有意为之、而非随手生成。', + }, + tocLabel: '本页目录', + toc: [ + { id: 'what-is-cursor', label: 'Cursor 到底是什么' }, + { id: 'why-design', label: '为什么 Cursor 擅长做设计' }, + { id: 'setup', label: '从零配置 Cursor 做设计' }, + { id: 'preview-workflow', label: '从预览到 UI 的工作流' }, + { id: 'figma', label: 'Cursor + Figma(经 MCP)' }, + { id: 'vs', label: 'Cursor vs Codex vs Claude Code' }, + { id: 'pitfalls', label: '常见坑与“AI 味”观感' }, + { id: 'open-design', label: '在 Open Design 里用 Cursor 做设计' }, + { id: 'faq', label: '常见问题' }, + ], + sections: [ + { + id: 'what-is-cursor', + heading: 'Cursor 到底是什么', + blocks: [ + { kind: 'p', text: 'Cursor 是 Anysphere 打造的 AI 优先代码编辑器。它是 VS Code 的一个 fork,所以保留了熟悉的编辑器、扩展和快捷键,但把整个工作流围绕一个 AI agent 重建——这个 agent 能读懂你的整个项目、跨多文件编辑、运行命令,并和你一起在回路里迭代。' }, + { kind: 'p', text: '对设计工作而言,关键的几个能力是:Agent 模式(你描述想要的结果,Cursor 规划并跨文件编辑)、用于快速微调的行内编辑与 Tab 补全、让你不离开窗口就能看到运行中 UI 的编辑器内置预览,以及让它能拉入外部上下文(比如一个实时 Figma 文件)的 MCP 支持。' }, + { kind: 'steps', items: [ + { label: '项目规则', body: 'Cursor 会读取项目指令文件——`.cursor/rules` 下纳入版本管理的 `.mdc` 规则,以及一个纯文本 `AGENTS.md`——你可以把设计约定写在 agent 每次都会读到的地方。' }, + { label: '模型', body: 'Cursor 在模型上很灵活:订阅自带前沿模型,也支持用你自己的模型密钥(BYOK),所以同一套编辑器工作流背后用哪台引擎由你定。' }, + { label: 'MCP', body: '它支持 Model Context Protocol,外部 server——最相关的就是 Figma MCP server——可以成为 agent 的一等上下文。' }, + ] }, + { kind: 'ul', items: [ + '厂商:Anysphere', + '凭证:Cursor 账号 / 订阅(Hobby / Pro / Business)或你自己的模型密钥(BYOK)', + '形态:AI 优先的代码编辑器(VS Code fork),内置 agent 与预览', + ] }, + ], + }, + { + id: 'why-design', + heading: '为什么 Cursor 擅长做设计', + blocks: [ + { kind: 'p', text: 'Cursor 在设计上的优势不是某个单一功能,而是“边写边看”这条回路的紧凑度。有三点让它更像一个设计工具,而不是一个泛泛的代码生成器。' }, + { kind: 'steps', items: [ + { label: '紧凑的“边迭代边看”回路', body: '你给出提示,Cursor 跨文件编辑,编辑器内置预览立刻渲染出结果——于是你能在几秒内调整间距、层级和动效,而不必在另一个终端和浏览器之间来回切换。' }, + { label: '直接的可视化编辑', body: '除了对话,Cursor 还允许你在预览里选中元素、直接微调样式,让小的视觉修正更像设计编辑、而非翻代码考古。' }, + { label: '项目规则与 MCP 上下文', body: '有了 `.cursor/rules`(或 `AGENTS.md`)和 Figma MCP server,agent 是对着你的 tokens、组件和真实设计规格在工作,而不是靠猜。' }, + ] }, + { kind: 'image', src: '/agents/cursor-design/cursor-design-taste-triangle.webp', alt: '展示 design system、skill 与参考图三者收敛为优质设计产出的示意图', caption: '审美来自你提供的三个输入:一套设计系统、一个 skill,以及真实的参考图。' }, + { kind: 'p', text: '结论和每个 agent 教给我们的一样:Cursor 默认并没有审美。只有当你给它约束——一套设计系统、一个审美 skill、具体的参考——它才能产出好设计。Open Design 打包的正是这些输入,这也是两者天然契合的原因(下文详述)。' }, + ], + }, + { + id: 'setup', + heading: '从零把 Cursor 配置成能做设计', + blocks: [ + { kind: 'p', text: '下面是从一台干净机器,到一个能对着你的设计系统构建、预览并验证 UI 的 Cursor 的完整路径。' }, + { kind: 'ol', items: [ + '从 cursor.com 安装 Cursor,用 Cursor 账号登录,或在设置里配置你自己的模型密钥(BYOK)。', + '打开你的项目,在对话 / Agent 面板里选一个模型。', + '加项目规则:用 `.cursor/rules/*.mdc` 写结构化、按 glob 作用域生效的约定,或用一个纯文本 `AGENTS.md` 写简单可读的指令。', + '接入 Figma MCP server(可选),让 agent 能读取实时设计上下文。', + '启动你的 dev server,用编辑器内置预览边迭代边看、边验证 UI。', + ] }, + { kind: 'image', src: '/agents/cursor-design/cursor-design-setup-flow.webp', alt: '五步配置流程:安装、认证、配置规则、添加 skill、验证', caption: '配置顺序:安装 → 认证 → 配置项目规则 → 添加 skill → 启用预览验证。' }, + { kind: 'p', text: '一份最简的项目规则文件,就能让 agent 对着品牌做设计、而不是退回到一个泛泛的样子。把它放在 Cursor 每次都会读到的地方:' }, + { kind: 'code', lang: 'markdown', code: '# .cursor/rules/design.mdc\n---\ndescription: Project design conventions\nalwaysApply: true\n---\n\n- 复用已有的 design-system tokens 和组件;不要写死 hex 或间距。\n- 最多两种字体、一个强调色。\n- 品牌优先的层级;克制的动效。不要 hero card,不要过大的圆角。\n- 默认做响应式;收尾前先在预览里验证桌面端和移动端。' }, + { kind: 'steps', items: [ + { label: '把设计规则写下来', body: '把你的 tokens、基础元件和约定放进 `.cursor/rules` 或 `AGENTS.md`,并让 Cursor 指向它们,这样产出会贴合品牌、而不是退回到泛泛的样子。' }, + { label: '让提示保持小而聚焦', body: 'Cursor 的紧凑回路偏爱聚焦的请求——一次只迭代一个组件或一种状态,每一轮之间都盯着预览看。' }, + ] }, + ], + }, + { + id: 'preview-workflow', + heading: '从预览到 UI 的工作流', + blocks: [ + { kind: 'p', text: '用 Cursor 做设计,杠杆最高的回路就是把一张参考变成能跑、且响应式的 UI,并在编辑器里一直盯着实时预览迭代到匹配为止——而不是靠猜。' }, + { kind: 'ol', items: [ + '从你手上最清晰的视觉参考开始——并且要包含多种状态(桌面与移动、hover、空态、加载态),而不只是一张主视觉。', + '提示要具体;含糊的提示只会产出泛泛的 UI。', + '准备好设计系统,并告诉 Cursor tokens 和标准基础元件都在哪里。', + '让编辑器内置预览开着、dev server 跑着,这样每次编辑都能在你关心的断点上立刻渲染出来。', + '通过把渲染出的 UI 和参考反复比对来迭代——小的视觉修正就直接在预览里选中元素来调。', + ] }, + { kind: 'p', text: '把图片附到对话里来喂参考,然后用具体约束给出提示:' }, + { kind: 'code', lang: 'text', code: '用 React + Vite + Tailwind + TypeScript 实现这个设计。\n复用我已有的 design-system 组件和 tokens。\n匹配间距、布局和层级;做成响应式。\n预览一直开着——验证桌面端和移动端都和参考一致,\n迭代到一致为止。' }, + { kind: 'p', text: '好的迭代就提交,坏的就回退(回退时告诉 Cursor 一声),让每一轮都建立在干净的基础上——这是让任何 agent 回路不跑偏的同一条纪律。' }, + ], + }, + { + id: 'figma', + heading: 'Cursor + Figma:经 MCP 的设计 ↔ 代码往返', + blocks: [ + { kind: 'p', text: 'Cursor 通过官方的 Figma MCP server 连接 Figma,让 agent 对一个实时 Figma 文件有结构化访问,而不是只拿到一张扁平截图。这就把交接里的猜测成分去掉了。' }, + { kind: 'steps', items: [ + { label: '设计 → 代码', body: '在 Figma 里复制某个 frame 的链接,粘进 Cursor,让它去实现这个设计。MCP server 暴露的是真实的设计上下文——组件、变量、布局数据、tokens——所以生成的代码是贴合源文件的,而不是近似。' }, + { label: '保持对齐', body: '只要在 Figma 里一致地使用设计 tokens、样式和组件(有 Code Connect 时用上),Cursor 的产出就会映射到你真实的设计系统,而不是重新发明一套基础元件。' }, + ] }, + { kind: 'p', text: '远程 Figma MCP server 配一次,就能作为一等上下文供 Cursor 使用。由于 MCP 是开放标准,同一个 server 可以在 Cursor、Claude Code、Codex 和 VS Code 之间复用——这正是 Open Design 生来要去编排的那种可移植、多 agent 能力。' }, + ], + }, + { + id: 'vs', + heading: 'Cursor vs Codex vs Claude Code:做设计怎么选', + blocks: [ + { kind: 'p', text: '做设计没有唯一赢家——每个 agent 各有所长,有经验的团队会把它们叠着用。一个公允的总结:' }, + { kind: 'table', columns: ['Agent', '设计强项', '最适合'], rows: [ + ['Cursor', '“边写边看”的可视化回路,带编辑器内置实时预览与直接选中元素编辑', 'IDE 里“边迭代边看”的紧凑 UI 工作'], + ['Codex', '配上前端 skill 后视觉打磨强;图像理解 + 沙箱化运行', '托管式异步构建,以及可移植的 AGENTS.md 规则'], + ['Claude Code', '具体的设计决策(hex、间距、字体)和懂代码库的 UX', '前端推理与大上下文重构'], + ] }, + { kind: 'p', text: '社区反复得出的结论是:审美来自人。三者在没有 skill、参考和约束时都会退回到一个泛泛的样子。那才是真正要解决的问题——而它是“设计工具”形状的,不是“模型”形状的。' }, + ], + }, + { + id: 'pitfalls', + heading: '常见坑,以及如何避开“AI 味”观感', + blocks: [ + { kind: 'p', text: '对 Cursor 生成设计最常见的抱怨,是它看着很泛——柔和渐变、悬浮面板、过大的圆角、夸张阴影,一股“Inter 字体加紫色”的味道,“一看就是 AI 做的”。其他被反映的问题还包括移动端布局错乱、指令文字泄漏进 UI 文案里。' }, + { kind: 'steps', items: [ + { label: '加一个设计 skill', body: '一个精选的审美 skill 会逼 Cursor 选定一个真实方向,而不是用默认那套。' }, + { label: '用预览来验证', body: '在编辑器内置预览里跨断点渲染并自检,这样布局就不会在移动端悄悄崩掉。' }, + { label: '提供 tokens 和参考', body: '真实的设计 tokens 和参考截图,是对产出质量影响最大的那个杠杆。' }, + { label: '把规则写进 `.cursor/rules`', body: '把“不要 hero card、最多两种字体、品牌优先层级”这类规则,放在 agent 每次都会读到的地方。' }, + ] }, + { kind: 'p', text: '注意到没有:每一条缓解措施都是在给 agent 一份精选的设计上下文。逐个项目、用手去维护这份上下文,正是 Open Design 帮你省掉的苦活。' }, + ], + }, + { + id: 'open-design', + heading: '在 Open Design 里用 Cursor 做设计', + blocks: [ + { kind: 'p', text: 'Open Design 就是上面这套工作流一直在要的那一层开源设计层。它把 Cursor 当作一等适配器,外面裹上一个精选的 skill 与 design-system 库、一条结构化的渲染流水线,以及一个本地桌面端 UI——让那份让 Cursor 变好用的设计上下文,从第一次运行就在那儿,而不是每次都手工拼。' }, + { kind: 'ol', items: [ + '安装 Open Design,选 Cursor 作为你的 agent。', + '用你的 Cursor 账号或你自己的模型密钥(BYOK)认证——凭证留在你的机器上,绝不经我们代理。', + '挑一套设计系统和一个 skill,然后生成审美一致的演示稿、原型和落地页。', + '每一份产物和 DESIGN.md 都存在你自己的 repo 里,而不是某个托管云。', + ] }, + { kind: 'p', text: '同一个 Cursor agent、同一把密钥——外面再加一套真实、可移植、开源的设计工作流。它本地优先、Apache-2.0 授权,所以你的工作和凭证没有任何东西会离开你的机器。' }, + ], + }, + ], + faqTitle: '常见问题', + faq: [ + { name: 'Cursor 真的能做设计吗?', text: '能——只要上下文里有一个设计 skill、一套设计系统和真实参考图,Cursor 就能产出生产级、响应式的 UI,而它的编辑器内置预览让你能在视觉上验证并打磨。缺了这份上下文,它就容易退回到泛泛的样子,而这正是 Open Design 补齐的缺口。' }, + { name: '这是 Cursor 官方产品吗?', text: '不是。Open Design 是一个独立的开源项目,把 Cursor 作为 agent 集成进来。它用一个本地优先、开源的 skill 与 design-system 库来补充 Cursor。' }, + { name: '用 Cursor 做设计需要 Cursor 订阅吗?', text: '你可以用 Cursor 账号 / 订阅,也可以用自己的模型密钥(BYOK)。无论哪种方式,Open Design 都不会代理你的凭证——它们由你的 agent 直接使用。' }, + { name: '前端设计选 Cursor 还是 Claude Code?', text: '两者都很强。Claude Code 以具体、懂代码库的设计决策著称;Cursor 的优势是编辑器里“边写边看”的紧凑回路加实时预览。很多团队两个都用——Open Design 让你切换 agent 时无需改动设计工作流。' }, + { name: '怎么把 Cursor 连到 Figma?', text: '在 Cursor 里加上官方 Figma MCP server,然后把一个 Figma frame 链接粘进对话,让 Cursor 去实现它。该 server 暴露真实的组件、变量和布局数据,让生成的代码贴合源设计。' }, + { name: '怎么避开泛泛的“AI 味”观感?', text: '加一个设计 skill、提供真实的设计 tokens 和参考截图、把品牌规则写进 `.cursor/rules` 或 `AGENTS.md`,并在预览里跨断点验证。Open Design 把这些做成一个精选库,让你省掉逐项目的搭建。' }, + { name: 'Open Design 和 Cursor 或 Anysphere 有关联吗?', text: '没有。Cursor 是 Anysphere 的产品;Open Design 是一个独立的开源项目,把它作为一等适配器来支持。Cursor 和 Anysphere 是 Anysphere, Inc. 的商标。' }, + { name: '我的文件和凭证安全吗?', text: '安全——Open Design 本地优先。你的文件、产物和 DESIGN.md 都留在你自己的 repo 里,你的 Cursor 或模型凭证由你的 agent 直接使用,绝不经 Open Design 的服务器中转。' }, + ], + ctaTitle: '用开放的方式,和 Cursor 一起做设计。', + ctaBody: '带上你自己的 Cursor 账号或模型密钥,把每个文件都留在本地,并在你已经在用的 agent 外面,得到一个精选的设计库。', + ctaActions: [ + { label: '在 Open Design 里使用 Cursor', href: '/quickstart/', variant: 'primary' }, + { label: '在 GitHub 上 Star', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: '下载桌面端', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + hubLinkLabel: '查看所有支持的 agent', + }, + aboutTitle: '什么是 Cursor', + aboutBody: [ + 'Cursor 是基于 VS Code 的 AI 优先代码编辑器,内置一个能在整个项目里改代码的 Agent。', + 'Cursor 推出了 Design Mode —— 点选某个元素、勾画一处改动,或用一句话描述,Cursor 就改底层的 React/Vue/Svelte 源码。配合 Figma MCP,它成了一个可信的设计转代码界面。', + 'Open Design 把 Cursor Agent 作为一方适配器,让它驱动结构化的开源设计流水线。', + ], + vendorLabel: '厂商', + vendor: 'Cursor(Anysphere)', + credentialLabel: '凭据', + credential: 'Cursor 账号,使用你自己的模型凭据', + designTitle: '用 Cursor 做设计', + designLead: + 'Cursor 的设计生态围绕可视化编辑和 Figma 互通:', + designPoints: [ + { label: 'Design Mode', body: '点选、勾画或说话来改 UI,Cursor 改源码 —— 由真实代码支撑的可视化编辑。' }, + { label: 'Figma → 代码', body: 'Figma MCP 把真实布局和 token 喂给 Cursor,让它按设计而非截图来构建。' }, + { label: '双向 Figma', body: '部分 MCP 让 Cursor 不只读取、还能用程序改 Figma 设计。' }, + { label: '设计转代码闭环', body: '常见范式:先在可视化工具里出稿,导入 Cursor,再用 Agent 精修和扩展。' }, + ], + linksTitle: '实战资源', + linksLead: '用 Cursor 做设计的发布、教程和工具:', + withOdTitle: 'Cursor + Open Design', + withOdLead: + 'Open Design 是围绕 Cursor 的开源设计层:精选 skill 与设计系统库、结构化渲染流水线、本地桌面 UI。', + withOdSteps: [ + '安装 Open Design,选 Cursor Agent。', + 'Cursor 用你自己的模型密钥 —— 不经过 Open Design 中转。', + '选一套设计系统和 skill,生成审美一致的 deck、原型和落地页。', + '一切留在你的 repo,本地优先。', + ], + withOdClosing: 'Cursor 的 Agent,外加一套开放、可移植的设计工作流。', + faqTitle: '常见问题', + faq: [ + { name: 'Cursor 适合做设计吗?', text: '配合 Design Mode 和 Figma MCP,它改、建 UI 都不错;从零开始则更需要一套设计系统。Open Design 开箱即提供。' }, + { name: 'Open Design 会取代 Cursor 的 Design Mode 吗?', text: '不会,是互补。Open Design 在 Agent 之上加一层开放、精选的设计系统与 skill 库,以及结构化渲染流水线。' }, + { name: 'Open Design 跟 Cursor 有关联吗?', text: '没有。Cursor 是 Anysphere 的产品;Open Design 是独立开源项目,以一方适配器集成它。' }, + ], + ctaTitle: '用开源的方式,跟 Cursor 一起设计。', + ctaBody: '给仓库点 Star、下载桌面版,或加入社区申请新适配器。', + }, + opencode: { + ...INFO_PAGE_COPY.en!.agentGuides!.opencode!, + title: 'OpenCode 做设计 — Open Design', + description: + '大家如何用 OpenCode 做 UI 和网页设计 —— design.md 文件、UI/UX skill、Figma MCP —— 以及 Open Design 如何把 OpenCode 变成本地优先的开源设计 Agent。', + breadcrumb: 'OpenCode', + label: 'Agent · OpenCode', + heading: '用 OpenCode 做设计。', + lead: 'OpenCode 是开源的终端 AI 编码 Agent。设计师给它挂上设计 skill 和 DESIGN.md 文件来生成真正的 UI。Open Design 把这套做成结构化的开源工作流 —— 用你自己的模型密钥,所有东西留本地。', + tldrTitle: '一句话', + tldrBody: + 'OpenCode 是完全开源的编码 Agent;设计是靠 skill、design.md 文件和 Figma MCP 衍生出来的用法。Open Design 在它周围打包一套精选设计系统与 skill 库,外加桌面工作流 —— 你的密钥,你的 repo。', + toc: ['什么是 OpenCode', '用 OpenCode 做设计', '资源', '配合 Open Design', '常见问题'], + rich: { + heroCtaLead: + 'Open Design 把 OpenCode 变成本地优先、开源的设计 agent——用你自己选的任意模型和 provider key,用你自己的文件,外加一套精选的 skill 与设计系统库。', + heroCtaActions: [ + { label: '在 Open Design 中使用 OpenCode', href: '/quickstart/', variant: 'primary' }, + { label: '在 GitHub 上 Star', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: '下载桌面应用', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + intro: [ + 'OpenCode 是一个开源、以终端为先的 AI 编码 agent,刻意做成与模型无关:你自带 provider key,在同一套工作流背后运行任意你想用的模型。这种开放性让它天然适合做设计——但和所有 agent 一样,只有当你给它正确的参考、skill 和一套验证回路时,它才能产出好的 UI。本文是一份从头到尾的实用指南,讲如何用 OpenCode 做 UI、前端和设计系统工作,以及如何把它接入 Open Design 的结构化设计工作流。', + '内容涵盖:OpenCode 到底是什么、为什么一个与模型无关的开源 agent 适合做设计、如何从零配置、截图转 UI 的回路、AGENTS.md 与 MCP 如何扩展它、它与 Codex / Claude Code / Cursor 的对比、让 AI 产出显得套路化的那些坑,以及 Open Design 如何作为一个开源、本地优先的设计层来补上这道缺口——这是个天然的搭配,因为两个项目都是开源、都跑在你自己的机器上。', + ], + heroImage: { + src: '/agents/opencode-design/opencode-design-hero.webp', + alt: 'OpenCode 设计反馈回路:终端 TUI agent、在浏览器中渲染 UI,以及一个工作区,带一条回环反馈箭头', + caption: '核心回路:OpenCode 在终端里构建 UI,在真实浏览器中渲染并验证,再对照你的参考反复迭代——用的是你自己选的任意模型。', + }, + tocLabel: '本页目录', + toc: [ + { id: 'what-is-opencode', label: 'OpenCode 究竟是什么' }, + { id: 'why-design', label: '为什么开放、任意模型的 agent 适合做设计' }, + { id: 'setup', label: '从零配置 OpenCode 做设计' }, + { id: 'screenshot-workflow', label: '截图转 UI 的工作流' }, + { id: 'extend', label: 'AGENTS.md、MCP 与可分享会话' }, + { id: 'vs', label: 'OpenCode vs Codex vs Claude Code vs Cursor' }, + { id: 'pitfalls', label: '坑,以及那种“AI 味”的观感' }, + { id: 'open-design', label: '在 Open Design 中用 OpenCode 做设计' }, + { id: 'faq', label: '常见问题' }, + ], + sections: [ + { + id: 'what-is-opencode', + heading: 'OpenCode 究竟是什么', + blocks: [ + { kind: 'p', text: 'OpenCode 是一个为终端打造的开源 AI 编码 agent,由 SST 背后的团队(Anomaly Innovations)维护。它会读取你的代码仓库、运行命令、编辑文件,并与大语言模型对话——但和被厂商绑定的 agent 不同,它本身不自带模型。你把它指向任意你想用的 provider 和模型,并自带 key。' }, + { kind: 'p', text: '它以终端界面(TUI)运行,并在同一引擎之上提供桌面应用和 IDE 扩展。底层采用客户端/服务端架构,所以真正干活的 agent 与你驱动它的界面是解耦的。它内置 build 和 plan 两个 agent,用 Tab 键切换。' }, + { kind: 'steps', items: [ + { label: '与模型无关', body: '模型和 provider 来自 models.dev 这个开放目录。你在 opencode.json 里用 provider/model-id 字符串配置,并可禁用不想加载的 provider——所以同一套设计工作流可以跑在 Anthropic、OpenAI、Google、OpenRouter、本地模型等之上。' }, + { label: '指令文件', body: 'OpenCode 会读取项目里的 AGENTS.md 文件(跨工具的通用标准,也兼容 CLAUDE.md)作为项目规则——这正是编码你设计约定的天然位置。运行 /init 即可生成一个。' }, + { label: '可扩展', body: '它支持 LSP 集成、MCP server、主题、快捷键和自定义命令,还有可分享的会话链接用于协作。' }, + ] }, + { kind: 'ul', items: [ + '维护方:SST / Anomaly Innovations(开源项目)', + '凭证:你自己的模型 provider API key(BYOK,无厂商锁定)', + '许可:MIT,开源', + ] }, + ], + }, + { + id: 'why-design', + heading: '为什么开放、任意模型的 agent 适合做设计', + blocks: [ + { kind: 'p', text: 'OpenCode 不像厂商 agent 那样有某一个“设计模型”——而这恰恰是它的优势。因为与模型无关且开源,你可以在同一套设计工作流上运行当下前端最强的那个模型,之后随时更换,或退回到本地模型,全程不用改配置。' }, + { kind: 'p', text: '但光选对模型并不能买来审美。和所有编码 agent 一样,除非你给它约束,否则 OpenCode 也会产出套路化的 UI。好的设计产出来自你提供的三项输入。' }, + { kind: 'steps', items: [ + { label: '一套设计系统', body: '真实的 tokens、基础组件和约定,让 agent 复用,从而让产出贴合某个品牌,而不是退回到通用的观感。' }, + { label: '一个审美 skill', body: '一个精选的 skill,强制真正的审美——克制的动效、品牌优先的层级、最多两种字体一种强调色——并让 agent 在动手前先定一个方向。' }, + { label: '具体的参考图', body: '真实的参考图,以及多种状态(桌面和移动、hover、空态、加载态),而不是只有一张主视觉。' }, + ] }, + { kind: 'image', src: '/agents/opencode-design/opencode-design-taste-triangle.webp', alt: '展示设计系统、skill 与参考图三者汇聚成优质设计产出的示意图', caption: '审美来自你提供的三项输入:一套设计系统、一个 skill 和真实参考图——与你跑哪个模型无关。' }, + { kind: 'p', text: '结论:OpenCode 给了你模型自由,但审美仍来自一套精选的设计上下文。Open Design 恰好把这些输入打包好,这也是两者契合的原因——它们都是开源、都本地优先(下文详述)。' }, + ], + }, + { + id: 'setup', + heading: '从零配置 OpenCode 做设计', + blocks: [ + { kind: 'p', text: '下面是从一台干净的机器到一个能构建并验证 UI 的 OpenCode 的完整路径。' }, + { kind: 'code', lang: 'bash', code: '# 1. 安装 OpenCode\ncurl -fsSL https://opencode.ai/install | bash\n# 或:npm i -g opencode-ai@latest\n# 或:brew install sst/tap/opencode\n\n# 2. 在项目里启动 TUI,然后认证你的 provider\nopencode # 然后运行 /login,选择 provider 并粘贴你的 key\n\n# 3. 生成项目上下文\nopencode # 在项目里运行 /init 生成 AGENTS.md\n\n# 4. 选择你的模型(任意 provider,经 models.dev)\n# 在 opencode.json 里设置 "provider/model-id",或在 TUI 里切换\n\n# 5. 添加 MCP server(可选,比如用于设计交付)\n# 在 opencode.json 的 "mcp" 字段下配置' }, + { kind: 'image', src: '/agents/opencode-design/opencode-design-setup-flow.webp', alt: '五步配置流程:安装、用你的 provider key 认证、配置 AGENTS.md、添加 skill、验证', caption: '配置顺序:安装 → 认证(你的 provider key)→ 配置 AGENTS.md → 添加 skill → 在真实浏览器中验证。' }, + { kind: 'steps', items: [ + { label: '编码你的设计规则', body: '把你的 tokens、基础组件和约定放进 AGENTS.md(或从中引用的 DESIGN.md),让产出贴合品牌而非退回通用观感。opencode.json 里的 instructions 选项可以用 glob 指向更多规则文件。' }, + { label: '选一个有能力的模型', body: '因为 OpenCode 与模型无关,可以为设计这一遍挑选当下前端最强的 provider/模型——而工作流的其余部分保持不变。' }, + ] }, + ], + }, + { + id: 'screenshot-workflow', + heading: '截图转 UI 的工作流', + blocks: [ + { kind: 'p', text: '用任何 agent 做设计,杠杆最高的回路都是:把一张参考图变成可用、响应式的 UI,并反复迭代直到匹配。同样的五步在 OpenCode 里也适用。' }, + { kind: 'ol', items: [ + '从你手头最清晰的视觉参考开始——并包含多种状态(桌面和移动、hover、空态、加载态),而不只是一张主视觉。', + '提示词要具体;含糊的提示会产出套路化的 UI。', + '准备好一套设计系统,并告诉 OpenCode tokens 和规范基础组件在哪里(写在 AGENTS.md 里)。', + '跑一个 dev server,让 agent 在真实浏览器中渲染,并切换到各断点检查结果。', + '让 OpenCode 把它的实现对照截图来迭代——而不只是确认能构建通过。', + ] }, + { kind: 'p', text: '在 TUI 里用 @ 引用文件会对工作目录做模糊搜索,用开头的 ! 内联运行 shell 命令,用 / 命令驱动各种操作。然后用具体约束来提示:' }, + { kind: 'code', lang: 'bash', code: 'opencode\n# 在 TUI 里:\n> @reference-desktop.png @reference-mobile.png\n 用 React + Vite + Tailwind + TypeScript 实现这个设计。\n 复用 AGENTS.md 里我现有的设计系统组件和 tokens。\n 匹配间距、布局和层级;做到响应式。\n 运行 dev server,在浏览器中打开,并反复迭代\n 直到 UI 在各断点上都与参考图匹配。' }, + { kind: 'p', text: '提示词保持小而聚焦,好的迭代就提交、坏的就回退(回退时告诉 OpenCode),让每一遍都建立在一个干净的基础上。' }, + ], + }, + { + id: 'extend', + heading: 'AGENTS.md、MCP 与可分享会话', + blocks: [ + { kind: 'p', text: '三个扩展点让 OpenCode 在持续的设计工作中真正好用,而且它们都能干净地映射到一套开放的设计工作流上。' }, + { kind: 'steps', items: [ + { label: 'AGENTS.md 规则', body: '项目规则放在仓库根目录的 AGENTS.md(或全局规则放在 ~/.config/opencode/AGENTS.md)。它是你设计约定的长期归宿,每次运行都会读取,并兼容其他 agent 使用的 CLAUDE.md 文件。' }, + { label: 'MCP server', body: 'OpenCode 同时支持本地(命令)和远程(URL)MCP server,在 mcp 字段下配置——这是把设计上下文和外部工具引入进来的可移植方式,跨 agent 通用,而不只服务于 OpenCode。' }, + { label: '可分享会话', body: '/share 命令会为一段会话创建公开链接,用于协作或评审,/unshare 则收回它——很适合为一遍设计获取反馈。' }, + ] }, + { kind: 'p', text: '这些都是可移植、跨 agent 的能力——正是 Open Design 被设计来去编排的那类东西,而不是每个项目里重造一遍。' }, + ], + }, + { + id: 'vs', + heading: 'OpenCode vs Codex vs Claude Code vs Cursor 做设计', + blocks: [ + { kind: 'p', text: '设计工作没有唯一赢家——每个 agent 各有所长,有经验的团队会叠着用。一个公允的总结:' }, + { kind: 'table', columns: ['Agent', '设计强项', '最适合'], rows: [ + ['OpenCode', '开源且与模型无关;在一套终端工作流背后运行任意 provider', 'BYOK 自由、切换模型、完全开放且本地优先的配置'], + ['Codex', '配合前端 skill 的视觉打磨能力强;图像理解', '委托式异步、沙箱化构建、可移植的 AGENTS.md 规则'], + ['Claude Code', '具体的设计决策(hex、间距、字体)和对代码库有感知的 UX', '前端推理和大上下文重构'], + ['Cursor', '带实时预览和内联编辑的所见即所得回路', 'IDE 内紧凑的边改边看 UI 工作'], + ] }, + { kind: 'p', text: '社区反复得出的结论是:审美来自人——所有这些 agent 在没有 skill、参考和约束时都会退回到通用观感。这才是真正要解决的问题——它是设计工具形状的,不是模型形状的,而这恰恰说明了为什么像 OpenCode 这样的开放 agent 与一个开放的设计层配合得如此之好。' }, + ], + }, + { + id: 'pitfalls', + heading: '坑,以及如何避开那种“AI 味”观感', + blocks: [ + { kind: 'p', text: '对 AI 生成设计最常见的吐槽是它看起来很套路——柔和渐变、悬浮面板、过大的圆角、夸张的阴影,一种 Inter 字体加紫色的味道,“一看就是 AI 做的”。其他被报告的问题还包括移动端布局错乱、指令文字漏进了 UI 文案。这些都不是 OpenCode 独有的;它们是任何 agent 在缺少精选设计上下文时都会发生的事。' }, + { kind: 'steps', items: [ + { label: '加一个审美 skill', body: '一个精选的设计 skill 会强制 agent 定下一个真正的方向,而不是默认观感。' }, + { label: '在真实浏览器中验证', body: '让它跨断点渲染并自检,这样布局就不会在移动端悄悄崩掉。' }, + { label: '提供 tokens 和参考', body: '真实的设计 tokens 和参考截图是对产出质量影响最大的单一杠杆。' }, + { label: '把规则写进 AGENTS.md', body: '把“不要 hero 卡片、最多两种字体、品牌优先层级”这类规则放在 agent 每次都会读到的地方。' }, + ] }, + { kind: 'p', text: '注意到了吗:每一项缓解措施都是关于给 agent 一套精选的设计上下文——无论你跑哪个模型。靠手工逐项目维护这套上下文,正是 Open Design 帮你免除的苦活。' }, + ], + }, + { + id: 'open-design', + heading: '在 Open Design 中用 OpenCode 做设计', + blocks: [ + { kind: 'p', text: 'Open Design 正是上面那套工作流一直在呼唤的开源设计层。它把 OpenCode 当作一等适配器,并为它套上一套精选的 skill 与设计系统库、一条结构化的渲染管线,以及一个本地桌面 UI——让那些让任何 agent 变好的设计上下文从第一次运行就在那里,而不是每次都手工拼凑。两个项目都是开源、都本地优先,这让它们的搭配水到渠成。' }, + { kind: 'ol', items: [ + '安装 Open Design,并选择 OpenCode 作为你的 agent。', + '用你自己的模型 provider API key(BYOK)认证——凭证留在你的机器上,绝不经我们代理。', + '选择任意 provider 和模型,再加上一套设计系统和一个 skill,然后生成审美一致的 deck、原型和落地页。', + '每个产物和 DESIGN.md 文件都存在你自己的仓库里,而不是托管云端。', + ] }, + { kind: 'p', text: '同一个 OpenCode agent、同样的模型自由——外加一套真正可移植、开源的设计工作流。它本地优先、采用 Apache-2.0 许可,所以你的工作和凭证都不会离开你的机器。' }, + ], + }, + ], + faqTitle: '常见问题', + faq: [ + { name: 'OpenCode 真的能做设计吗?', text: '能——当上下文里有审美 skill、设计系统和真实参考图时,OpenCode 能产出生产级、响应式的 UI,并能在浏览器中验证。因为它与模型无关,你可以运行当下前端最强的那个模型。缺少这套精选上下文时,它会倾向于退回到通用观感,而这正是 Open Design 补上的缺口。' }, + { name: '用 OpenCode 做设计该选哪个模型?', text: '你喜欢哪个都行——OpenCode 经 models.dev 与 provider 无关,所以你可以在同一套工作流背后运行 Anthropic、OpenAI、Google、OpenRouter 或本地模型,并随时切换。设计产出的质量更多取决于你的 skill、设计系统和参考,而非单看模型。' }, + { name: 'Open Design 是 OpenCode(SST)团队做的吗?', text: '不是。Open Design 是一个独立的开源项目,把 OpenCode 集成为一个 agent。它用一套本地优先、开源的 skill 与设计系统库来补足 OpenCode。' }, + { name: '用 OpenCode 做设计需要什么特殊订阅吗?', text: '不需要——OpenCode 是 BYOK。你自带模型 provider 的 API key,Open Design 绝不代理你的凭证,也没有厂商锁定。' }, + { name: '前端设计选 OpenCode、Codex 还是 Claude Code?', text: '都很强,很多团队会叠着用。OpenCode 的优势在于完全开源且与模型无关;Codex 擅长委托式、沙箱化构建;Claude Code 以具体、对代码库有感知的设计决策著称。Open Design 让你切换 agent 而不改变你的设计工作流。' }, + { name: '如何为设计上下文扩展 OpenCode?', text: '把规则写进 AGENTS.md,在 mcp 字段下添加 MCP server 以引入可移植工具和设计上下文,并用可分享会话来做评审。Open Design 直接提供一套精选的 skill 与设计系统库,让你省去逐项目的配置。' }, + { name: 'Open Design 与 OpenCode 或 SST 有关联吗?', text: '没有。OpenCode 是由 SST(Anomaly Innovations)维护的开源项目;Open Design 是一个独立的开源项目,把它作为一等适配器来支持。' }, + { name: '我的文件和凭证安全吗?', text: '安全——Open Design 本地优先。你的文件、产物和 DESIGN.md 都留在你自己的仓库里,你的模型 provider 凭证由你的 agent 直接使用,绝不经 Open Design 服务器中转。' }, + ], + ctaTitle: '用开放的方式,借 OpenCode 做设计。', + ctaBody: '自带你的模型 provider key,把每个文件留在本地,并为你已经在用的这个开放 agent 套上一套精选的设计库。', + ctaActions: [ + { label: '在 Open Design 中使用 OpenCode', href: '/quickstart/', variant: 'primary' }, + { label: '在 GitHub 上 Star', href: 'https://github.com/nexu-io/open-design', variant: 'ghost', external: true }, + { label: '下载桌面应用', href: 'https://github.com/nexu-io/open-design/releases', variant: 'ghost', external: true }, + ], + hubLinkLabel: '查看所有支持的 agent', + }, + aboutTitle: '什么是 OpenCode', + aboutBody: [ + 'OpenCode 是开源(MIT)的终端 AI 编码 Agent —— 一个 TUI 加桌面、IDE 界面 —— 由 Anomaly(SST 团队)维护,仓库在 github.com/anomalyco/opencode。', + '它是编码 Agent,不是专门的设计工具。设计是靠给它加 skill、DESIGN.md 系统文件,以及 Figma/可视画布 MCP 来控制视觉输出实现的。', + 'Open Design 把 OpenCode 作为一方适配器,把这些零散范式变成结构化的开放设计流水线。', + ], + vendorLabel: '厂商', + vendor: 'Anomaly(开源,MIT)', + credentialLabel: '凭据', + credential: '通过 OpenCode 配置接入模型凭据(BYOK)', + designTitle: '用 OpenCode 做设计', + designLead: + 'OpenCode 社区靠配置和 skill 给 Agent 喂「审美」:', + designPoints: [ + { label: 'design.md 系统', body: '把品牌 DESIGN.md(Stripe/Linear/Airbnb 风格规则)放进项目,让 OpenCode 生成匹配的 UI。' }, + { label: 'UI/UX skill', body: '设计智能 skill 带来几十种 UI 风格和配色,在写代码前先生成一套设计系统。' }, + { label: 'Figma 与可视画布 MCP', body: '通过 MCP 接 Figma 或可视画布,形成设计转代码闭环。' }, + { label: '模型审美', body: '因为 OpenCode 是 BYOK,你可以挑最对你审美和预算的模型。' }, + ], + linksTitle: '实战资源', + linksLead: '用 OpenCode 做设计的 skill、design.md 合集和教程:', + withOdTitle: 'OpenCode + Open Design', + withOdLead: + 'Open Design 是围绕 OpenCode 的开源设计层:精选 skill 与设计系统库、结构化渲染流水线、本地桌面 UI —— 不用再手工拼 design.md 和 skill。', + withOdSteps: [ + '安装 Open Design,选 OpenCode 作为你的 Agent。', + 'OpenCode 通过它自己的配置用你的模型密钥(BYOK)—— 不经过中转。', + '选一套设计系统和 skill,生成审美一致的 deck、原型和落地页。', + '两个项目都开源、本地优先 —— 你的文件永不离开你的机器。', + ], + withOdClosing: '两个开源 Agent,一套本地优先的设计工作流。', + faqTitle: '常见问题', + faq: [ + { name: '是哪个 OpenCode?', text: '是 github.com/anomalyco/opencode 这个开源终端 Agent(原 sst/opencode),由 Anomaly 维护。别跟同名工具混淆。' }, + { name: 'OpenCode 能做 UI 设计吗?', text: '能,给它 design.md 文件和 UI/UX skill 上下文即可。Open Design 提供精选的两者库,省去手工搭建。' }, + { name: 'Open Design 跟 OpenCode 是同一个项目吗?', text: '不是。两者都开源,但是独立项目。Open Design 把 OpenCode 作为一方 Agent 适配器集成。' }, + ], + ctaTitle: '用开源的方式,跟 OpenCode 一起设计。', + ctaBody: '给仓库点 Star、下载桌面版,或加入社区申请新适配器。', + }, + }, download: { ...INFO_PAGE_COPY.en!.download, title: '下载 Open Design —— macOS / Windows / Linux 桌面客户端', @@ -1724,6 +3633,12 @@ function compactCommon(locale: LandingLocaleCode, text: CompactInfoPageText): In }; } +// Per-locale agent-guide translations, built by spreading the English guides +// (so non-rendered compact fields stay type-complete) and overriding with the +// localized copy. en + zh come from INFO_PAGE_COPY directly; every other locale +// resolves its agent pages here instead of falling back to English. +const LOCALIZED_AGENT_GUIDES = buildLocalizedAgentGuides(INFO_PAGE_COPY.en!.agentGuides); + function compactInfoPageCopy( locale: LandingLocaleCode, text: CompactInfoPageText, @@ -1921,6 +3836,9 @@ function compactInfoPageCopy( ], ctaBody: text.reusable.ctaBody, }, + // Per-agent detail pages: prefer the locale's own translated guides, and + // fall back to the English copy for any locale not yet translated. + agentGuides: LOCALIZED_AGENT_GUIDES[locale] ?? INFO_PAGE_COPY.en?.agentGuides ?? {}, // Localized /download copy per compact locale; English is the fallback // for any locale not yet in COMPACT_DOWNLOAD_COPY. download: COMPACT_DOWNLOAD_COPY[locale] ?? INFO_PAGE_COPY.en!.download, diff --git a/apps/landing-page/app/pages/[locale]/agents/claude-code-design/index.astro b/apps/landing-page/app/pages/[locale]/agents/claude-code-design/index.astro new file mode 100644 index 0000000000..f903d05410 --- /dev/null +++ b/apps/landing-page/app/pages/[locale]/agents/claude-code-design/index.astro @@ -0,0 +1,12 @@ +--- +import AgentDetailPage from '../../../agents/claude-code-design/index.astro'; +import { DEFAULT_LOCALE, LANDING_LOCALES } from '../../../../i18n'; + +export function getStaticPaths() { + return LANDING_LOCALES.filter((locale) => locale.code !== DEFAULT_LOCALE).map( + (locale) => ({ params: { locale: locale.code } }), + ); +} +--- + + diff --git a/apps/landing-page/app/pages/[locale]/agents/codex-design/index.astro b/apps/landing-page/app/pages/[locale]/agents/codex-design/index.astro new file mode 100644 index 0000000000..75006c1d59 --- /dev/null +++ b/apps/landing-page/app/pages/[locale]/agents/codex-design/index.astro @@ -0,0 +1,12 @@ +--- +import AgentDetailPage from '../../../agents/codex-design/index.astro'; +import { DEFAULT_LOCALE, LANDING_LOCALES } from '../../../../i18n'; + +export function getStaticPaths() { + return LANDING_LOCALES.filter((locale) => locale.code !== DEFAULT_LOCALE).map( + (locale) => ({ params: { locale: locale.code } }), + ); +} +--- + + diff --git a/apps/landing-page/app/pages/[locale]/agents/cursor-design/index.astro b/apps/landing-page/app/pages/[locale]/agents/cursor-design/index.astro new file mode 100644 index 0000000000..31aea73fca --- /dev/null +++ b/apps/landing-page/app/pages/[locale]/agents/cursor-design/index.astro @@ -0,0 +1,12 @@ +--- +import AgentDetailPage from '../../../agents/cursor-design/index.astro'; +import { DEFAULT_LOCALE, LANDING_LOCALES } from '../../../../i18n'; + +export function getStaticPaths() { + return LANDING_LOCALES.filter((locale) => locale.code !== DEFAULT_LOCALE).map( + (locale) => ({ params: { locale: locale.code } }), + ); +} +--- + + diff --git a/apps/landing-page/app/pages/[locale]/agents/opencode-design/index.astro b/apps/landing-page/app/pages/[locale]/agents/opencode-design/index.astro new file mode 100644 index 0000000000..83aa411b84 --- /dev/null +++ b/apps/landing-page/app/pages/[locale]/agents/opencode-design/index.astro @@ -0,0 +1,12 @@ +--- +import AgentDetailPage from '../../../agents/opencode-design/index.astro'; +import { DEFAULT_LOCALE, LANDING_LOCALES } from '../../../../i18n'; + +export function getStaticPaths() { + return LANDING_LOCALES.filter((locale) => locale.code !== DEFAULT_LOCALE).map( + (locale) => ({ params: { locale: locale.code } }), + ); +} +--- + + diff --git a/apps/landing-page/app/pages/agents/claude-code-design/index.astro b/apps/landing-page/app/pages/agents/claude-code-design/index.astro new file mode 100644 index 0000000000..a49520d3c3 --- /dev/null +++ b/apps/landing-page/app/pages/agents/claude-code-design/index.astro @@ -0,0 +1,301 @@ +--- +/* + * /agents/claude-code-design/ — agent detail page (industrial long-form). + * + * Captures "claude code design", "claude code for design", "design with claude code" intent and drives to Open Design. When the + * agent guide carries a `rich` payload this renders the deep how-to + * layout (hero CTA + sectioned long-form + images); otherwise it falls + * back to the compact layout. Linked from the `/agents/` hub. + * + * All copy and resource links come from `copy.agentGuides['claude-code']`; + * never fabricate URLs or facts here. + */ +import Layout from '../../../_components/sub-page-layout.astro'; +import { getInfoPageCopy } from '../../../info-page-i18n'; +import { localeFromPath, localizedHref } from '../../../i18n'; + +const SLUG = 'claude-code'; +const ROUTE = 'claude-code-design'; +const SITE = Astro.site?.toString() ?? 'https://open-design.ai/'; +const REPO = 'https://github.com/nexu-io/open-design'; +const REPO_RELEASES = `${REPO}/releases`; +const locale = localeFromPath(Astro.url.pathname); +const href = (path: string) => localizedHref(path, locale); +const copy = getInfoPageCopy(locale); +const common = copy.common; +// Compact locales fall back to the English guide rather than crash on undefined. +const page = copy.agentGuides[SLUG] ?? getInfoPageCopy('en').agentGuides[SLUG]!; +const rich = page.rich; + +// Localize CTA action hrefs while leaving external links untouched. +const ctaHref = (a: { href: string; external?: boolean }) => + a.external ? a.href : href(a.href); + +const faqEntries = (rich?.faq ?? page.faq).map(({ name, text }) => ({ name, text })); + +// JSON-LD URLs must match the locale-specific canonical the Layout emits, so +// build them from the localized path rather than the hard-coded English route. +const homeUrl = new URL(href('/'), SITE).toString(); +const agentsHubUrl = new URL(href('/agents/'), SITE).toString(); +const pageUrl = new URL(Astro.url.pathname, SITE).toString(); + +const jsonLd = [ + { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: [ + { '@type': 'ListItem', position: 1, name: 'Open Design', item: homeUrl }, + { '@type': 'ListItem', position: 2, name: 'Agents', item: agentsHubUrl }, + { '@type': 'ListItem', position: 3, name: page.breadcrumb, item: pageUrl }, + ], + }, + { + '@context': 'https://schema.org', + '@type': 'Article', + headline: page.title, + description: page.description, + url: pageUrl, + isPartOf: { '@id': `${SITE}#website` }, + }, + { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: faqEntries.map(({ name, text }) => ({ + '@type': 'Question', + name, + acceptedAnswer: { '@type': 'Answer', text }, + })), + }, +]; +--- + + + + +
    + {rich ? ( + <> + {/* Single-column article header: full-measure heading + lead + CTA, + then a full-width hero banner. One measure / one left edge so the + heading never wraps mid-word and the body never feels offset. */} +
    + {page.label} +

    {page.heading}

    +

    {page.lead}

    +
    + {rich.heroCtaActions.map((a) => ( + {a.label} + ))} +
    +
    + + {rich.heroImage ? ( +
    + {rich.heroImage.alt} +
    + ) : null} + +
    +

    {rich.heroCtaLead}

    + {rich.intro.map((p) => (

    {p}

    ))} +
    + + + + {rich.sections.map((section) => ( +
    +

    {section.heading}

    + {section.blocks.map((block) => { + if (block.kind === 'p') return

    {block.text}

    ; + if (block.kind === 'ul') return
      {block.items.map((i) => (
    • {i}
    • ))}
    ; + if (block.kind === 'ol') return
      {block.items.map((i) => (
    1. {i}
    2. ))}
    ; + if (block.kind === 'steps') + return ( +
      + {block.items.map((i) => (
    • {i.label}: {i.body}
    • ))} +
    + ); + if (block.kind === 'code') + return ( +
    {block.code}
    + ); + if (block.kind === 'image') + return ( +
    + {block.alt} + {block.caption ?
    {block.caption}
    : null} +
    + ); + if (block.kind === 'table') + return ( +
    + + + {block.columns.map((c) => ())} + + + {block.rows.map((row) => ( + + {row.map((cell, ci) => ( + ci === 0 ? : + ))} + + ))} + +
    {c}
    {cell}{cell}
    +
    + ); + return null; + })} +
    + ))} + +
    +

    {rich.faqTitle}

    +
      + {faqEntries.map(({ name, text }, idx) => ( +
    1. +
      + + {String(idx + 1).padStart(2, '0')} + {name} + + +

      {text}

      +
      +
    2. + ))} +
    +
    + +
    +
    +

    {rich.ctaTitle}

    +

    {rich.ctaBody}

    +
    +
    + {rich.ctaActions.map((a) => ( + {a.label} + ))} +
    +
    + ● {common.apache} + {common.localFirst} · {common.byok} + {rich.hubLinkLabel} +
    +
    + + ) : ( + <> +
    + {page.label} +

    {page.heading}

    +

    {page.lead}

    +
    + +
    +

    {page.tldrTitle}

    +

    {page.tldrBody}

    +
    + + + +
    +

    {page.aboutTitle}

    + {page.aboutBody.map((paragraph) => (

    {paragraph}

    ))} +
      +
    • {page.vendorLabel}: {page.vendor}
    • +
    • {page.credentialLabel}: {page.credential}
    • +
    +
    + +
    +

    {page.designTitle}

    +

    {page.designLead}

    +
      + {page.designPoints.map((item) => (
    1. {item.label} {item.body}
    2. ))} +
    +
    + +
    +

    {page.linksTitle}

    +

    {page.linksLead}

    +
      + {page.links.map((l) => ( +
    • + {l.label} + {l.source} +
    • + ))} +
    +
    + +
    +

    {page.withOdTitle}

    +

    {page.withOdLead}

    +
      {page.withOdSteps.map((step) => (
    1. {step}
    2. ))}
    +

    {page.withOdClosing}

    +
    + +
    +

    {page.faqTitle}

    +
      + {page.faq.map(({ name, text }, idx) => ( +
    1. +
      + + {String(idx + 1).padStart(2, '0')} + {name} + + +

      {text}

      +
      +
    2. + ))} +
    +
    + +
    +
    +

    {page.ctaTitle}

    +

    {page.ctaBody}

    +
    + +
    + ● {common.apache} + {common.localFirst} · {common.byok} + {copy.agents.breadcrumb} +
    +
    + + )} +
    +
    diff --git a/apps/landing-page/app/pages/agents/codex-design/index.astro b/apps/landing-page/app/pages/agents/codex-design/index.astro new file mode 100644 index 0000000000..01b7606c8f --- /dev/null +++ b/apps/landing-page/app/pages/agents/codex-design/index.astro @@ -0,0 +1,302 @@ +--- +/* + * /agents/codex-design/ — agent detail page (industrial long-form). + * + * Captures "codex design", "codex for design", "build UI with codex", + * "openai codex frontend" intent and drives to Open Design. When the + * agent guide carries a `rich` payload this renders the deep how-to + * layout (hero CTA + sectioned long-form + images); otherwise it falls + * back to the compact layout. Linked from the `/agents/` hub. + * + * All copy and resource links come from `copy.agentGuides['codex']`; + * never fabricate URLs or facts here. + */ +import Layout from '../../../_components/sub-page-layout.astro'; +import { getInfoPageCopy } from '../../../info-page-i18n'; +import { localeFromPath, localizedHref } from '../../../i18n'; + +const SLUG = 'codex'; +const ROUTE = 'codex-design'; +const SITE = Astro.site?.toString() ?? 'https://open-design.ai/'; +const REPO = 'https://github.com/nexu-io/open-design'; +const REPO_RELEASES = `${REPO}/releases`; +const locale = localeFromPath(Astro.url.pathname); +const href = (path: string) => localizedHref(path, locale); +const copy = getInfoPageCopy(locale); +const common = copy.common; +// Compact locales fall back to the English guide rather than crash on undefined. +const page = copy.agentGuides[SLUG] ?? getInfoPageCopy('en').agentGuides[SLUG]!; +const rich = page.rich; + +// Localize CTA action hrefs while leaving external links untouched. +const ctaHref = (a: { href: string; external?: boolean }) => + a.external ? a.href : href(a.href); + +const faqEntries = (rich?.faq ?? page.faq).map(({ name, text }) => ({ name, text })); + +// JSON-LD URLs must match the locale-specific canonical the Layout emits, so +// build them from the localized path rather than the hard-coded English route. +const homeUrl = new URL(href('/'), SITE).toString(); +const agentsHubUrl = new URL(href('/agents/'), SITE).toString(); +const pageUrl = new URL(Astro.url.pathname, SITE).toString(); + +const jsonLd = [ + { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: [ + { '@type': 'ListItem', position: 1, name: 'Open Design', item: homeUrl }, + { '@type': 'ListItem', position: 2, name: 'Agents', item: agentsHubUrl }, + { '@type': 'ListItem', position: 3, name: page.breadcrumb, item: pageUrl }, + ], + }, + { + '@context': 'https://schema.org', + '@type': 'Article', + headline: page.title, + description: page.description, + url: pageUrl, + isPartOf: { '@id': `${SITE}#website` }, + }, + { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: faqEntries.map(({ name, text }) => ({ + '@type': 'Question', + name, + acceptedAnswer: { '@type': 'Answer', text }, + })), + }, +]; +--- + + + + +
    + {rich ? ( + <> + {/* Single-column article header: full-measure heading + lead + CTA, + then a full-width hero banner. One measure / one left edge so the + heading never wraps mid-word and the body never feels offset. */} +
    + {page.label} +

    {page.heading}

    +

    {page.lead}

    +
    + {rich.heroCtaActions.map((a) => ( + {a.label} + ))} +
    +
    + + {rich.heroImage ? ( +
    + {rich.heroImage.alt} +
    + ) : null} + +
    +

    {rich.heroCtaLead}

    + {rich.intro.map((p) => (

    {p}

    ))} +
    + + + + {rich.sections.map((section) => ( +
    +

    {section.heading}

    + {section.blocks.map((block) => { + if (block.kind === 'p') return

    {block.text}

    ; + if (block.kind === 'ul') return
      {block.items.map((i) => (
    • {i}
    • ))}
    ; + if (block.kind === 'ol') return
      {block.items.map((i) => (
    1. {i}
    2. ))}
    ; + if (block.kind === 'steps') + return ( +
      + {block.items.map((i) => (
    • {i.label}: {i.body}
    • ))} +
    + ); + if (block.kind === 'code') + return ( +
    {block.code}
    + ); + if (block.kind === 'image') + return ( +
    + {block.alt} + {block.caption ?
    {block.caption}
    : null} +
    + ); + if (block.kind === 'table') + return ( +
    + + + {block.columns.map((c) => ())} + + + {block.rows.map((row) => ( + + {row.map((cell, ci) => ( + ci === 0 ? : + ))} + + ))} + +
    {c}
    {cell}{cell}
    +
    + ); + return null; + })} +
    + ))} + +
    +

    {rich.faqTitle}

    +
      + {faqEntries.map(({ name, text }, idx) => ( +
    1. +
      + + {String(idx + 1).padStart(2, '0')} + {name} + + +

      {text}

      +
      +
    2. + ))} +
    +
    + +
    +
    +

    {rich.ctaTitle}

    +

    {rich.ctaBody}

    +
    +
    + {rich.ctaActions.map((a) => ( + {a.label} + ))} +
    +
    + ● {common.apache} + {common.localFirst} · {common.byok} + {rich.hubLinkLabel} +
    +
    + + ) : ( + <> +
    + {page.label} +

    {page.heading}

    +

    {page.lead}

    +
    + +
    +

    {page.tldrTitle}

    +

    {page.tldrBody}

    +
    + + + +
    +

    {page.aboutTitle}

    + {page.aboutBody.map((paragraph) => (

    {paragraph}

    ))} +
      +
    • {page.vendorLabel}: {page.vendor}
    • +
    • {page.credentialLabel}: {page.credential}
    • +
    +
    + +
    +

    {page.designTitle}

    +

    {page.designLead}

    +
      + {page.designPoints.map((item) => (
    1. {item.label} {item.body}
    2. ))} +
    +
    + +
    +

    {page.linksTitle}

    +

    {page.linksLead}

    +
      + {page.links.map((l) => ( +
    • + {l.label} + {l.source} +
    • + ))} +
    +
    + +
    +

    {page.withOdTitle}

    +

    {page.withOdLead}

    +
      {page.withOdSteps.map((step) => (
    1. {step}
    2. ))}
    +

    {page.withOdClosing}

    +
    + +
    +

    {page.faqTitle}

    +
      + {page.faq.map(({ name, text }, idx) => ( +
    1. +
      + + {String(idx + 1).padStart(2, '0')} + {name} + + +

      {text}

      +
      +
    2. + ))} +
    +
    + +
    +
    +

    {page.ctaTitle}

    +

    {page.ctaBody}

    +
    + +
    + ● {common.apache} + {common.localFirst} · {common.byok} + {copy.agents.breadcrumb} +
    +
    + + )} +
    +
    diff --git a/apps/landing-page/app/pages/agents/cursor-design/index.astro b/apps/landing-page/app/pages/agents/cursor-design/index.astro new file mode 100644 index 0000000000..f9a7c471bd --- /dev/null +++ b/apps/landing-page/app/pages/agents/cursor-design/index.astro @@ -0,0 +1,301 @@ +--- +/* + * /agents/cursor-design/ — agent detail page (industrial long-form). + * + * Captures "cursor design", "cursor for designers", "build UI with cursor" intent and drives to Open Design. When the + * agent guide carries a `rich` payload this renders the deep how-to + * layout (hero CTA + sectioned long-form + images); otherwise it falls + * back to the compact layout. Linked from the `/agents/` hub. + * + * All copy and resource links come from `copy.agentGuides['cursor']`; + * never fabricate URLs or facts here. + */ +import Layout from '../../../_components/sub-page-layout.astro'; +import { getInfoPageCopy } from '../../../info-page-i18n'; +import { localeFromPath, localizedHref } from '../../../i18n'; + +const SLUG = 'cursor'; +const ROUTE = 'cursor-design'; +const SITE = Astro.site?.toString() ?? 'https://open-design.ai/'; +const REPO = 'https://github.com/nexu-io/open-design'; +const REPO_RELEASES = `${REPO}/releases`; +const locale = localeFromPath(Astro.url.pathname); +const href = (path: string) => localizedHref(path, locale); +const copy = getInfoPageCopy(locale); +const common = copy.common; +// Compact locales fall back to the English guide rather than crash on undefined. +const page = copy.agentGuides[SLUG] ?? getInfoPageCopy('en').agentGuides[SLUG]!; +const rich = page.rich; + +// Localize CTA action hrefs while leaving external links untouched. +const ctaHref = (a: { href: string; external?: boolean }) => + a.external ? a.href : href(a.href); + +const faqEntries = (rich?.faq ?? page.faq).map(({ name, text }) => ({ name, text })); + +// JSON-LD URLs must match the locale-specific canonical the Layout emits, so +// build them from the localized path rather than the hard-coded English route. +const homeUrl = new URL(href('/'), SITE).toString(); +const agentsHubUrl = new URL(href('/agents/'), SITE).toString(); +const pageUrl = new URL(Astro.url.pathname, SITE).toString(); + +const jsonLd = [ + { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: [ + { '@type': 'ListItem', position: 1, name: 'Open Design', item: homeUrl }, + { '@type': 'ListItem', position: 2, name: 'Agents', item: agentsHubUrl }, + { '@type': 'ListItem', position: 3, name: page.breadcrumb, item: pageUrl }, + ], + }, + { + '@context': 'https://schema.org', + '@type': 'Article', + headline: page.title, + description: page.description, + url: pageUrl, + isPartOf: { '@id': `${SITE}#website` }, + }, + { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: faqEntries.map(({ name, text }) => ({ + '@type': 'Question', + name, + acceptedAnswer: { '@type': 'Answer', text }, + })), + }, +]; +--- + + + + +
    + {rich ? ( + <> + {/* Single-column article header: full-measure heading + lead + CTA, + then a full-width hero banner. One measure / one left edge so the + heading never wraps mid-word and the body never feels offset. */} +
    + {page.label} +

    {page.heading}

    +

    {page.lead}

    +
    + {rich.heroCtaActions.map((a) => ( + {a.label} + ))} +
    +
    + + {rich.heroImage ? ( +
    + {rich.heroImage.alt} +
    + ) : null} + +
    +

    {rich.heroCtaLead}

    + {rich.intro.map((p) => (

    {p}

    ))} +
    + + + + {rich.sections.map((section) => ( +
    +

    {section.heading}

    + {section.blocks.map((block) => { + if (block.kind === 'p') return

    {block.text}

    ; + if (block.kind === 'ul') return
      {block.items.map((i) => (
    • {i}
    • ))}
    ; + if (block.kind === 'ol') return
      {block.items.map((i) => (
    1. {i}
    2. ))}
    ; + if (block.kind === 'steps') + return ( +
      + {block.items.map((i) => (
    • {i.label}: {i.body}
    • ))} +
    + ); + if (block.kind === 'code') + return ( +
    {block.code}
    + ); + if (block.kind === 'image') + return ( +
    + {block.alt} + {block.caption ?
    {block.caption}
    : null} +
    + ); + if (block.kind === 'table') + return ( +
    + + + {block.columns.map((c) => ())} + + + {block.rows.map((row) => ( + + {row.map((cell, ci) => ( + ci === 0 ? : + ))} + + ))} + +
    {c}
    {cell}{cell}
    +
    + ); + return null; + })} +
    + ))} + +
    +

    {rich.faqTitle}

    +
      + {faqEntries.map(({ name, text }, idx) => ( +
    1. +
      + + {String(idx + 1).padStart(2, '0')} + {name} + + +

      {text}

      +
      +
    2. + ))} +
    +
    + +
    +
    +

    {rich.ctaTitle}

    +

    {rich.ctaBody}

    +
    +
    + {rich.ctaActions.map((a) => ( + {a.label} + ))} +
    +
    + ● {common.apache} + {common.localFirst} · {common.byok} + {rich.hubLinkLabel} +
    +
    + + ) : ( + <> +
    + {page.label} +

    {page.heading}

    +

    {page.lead}

    +
    + +
    +

    {page.tldrTitle}

    +

    {page.tldrBody}

    +
    + + + +
    +

    {page.aboutTitle}

    + {page.aboutBody.map((paragraph) => (

    {paragraph}

    ))} +
      +
    • {page.vendorLabel}: {page.vendor}
    • +
    • {page.credentialLabel}: {page.credential}
    • +
    +
    + +
    +

    {page.designTitle}

    +

    {page.designLead}

    +
      + {page.designPoints.map((item) => (
    1. {item.label} {item.body}
    2. ))} +
    +
    + +
    +

    {page.linksTitle}

    +

    {page.linksLead}

    +
      + {page.links.map((l) => ( +
    • + {l.label} + {l.source} +
    • + ))} +
    +
    + +
    +

    {page.withOdTitle}

    +

    {page.withOdLead}

    +
      {page.withOdSteps.map((step) => (
    1. {step}
    2. ))}
    +

    {page.withOdClosing}

    +
    + +
    +

    {page.faqTitle}

    +
      + {page.faq.map(({ name, text }, idx) => ( +
    1. +
      + + {String(idx + 1).padStart(2, '0')} + {name} + + +

      {text}

      +
      +
    2. + ))} +
    +
    + +
    +
    +

    {page.ctaTitle}

    +

    {page.ctaBody}

    +
    + +
    + ● {common.apache} + {common.localFirst} · {common.byok} + {copy.agents.breadcrumb} +
    +
    + + )} +
    +
    diff --git a/apps/landing-page/app/pages/agents/index.astro b/apps/landing-page/app/pages/agents/index.astro index 00c0322802..24c31c8f68 100644 --- a/apps/landing-page/app/pages/agents/index.astro +++ b/apps/landing-page/app/pages/agents/index.astro @@ -5,8 +5,8 @@ * Captures "claude code design", "codex design", "cursor agent design", * "gemini cli design", "opencode design", "qwen design" queries. Each * agent gets a short card explaining how it plugs into Open Design. - * Per-agent detail pages (e.g. `/agents/claude-code/`) will follow as - * P2 work — this hub is the SEO entry point. + * Agents with a dedicated long-form page link into `/agents/-design/` + * (see DETAIL_ROUTES below); this hub is the SEO entry point. */ import Layout from '../../_components/sub-page-layout.astro'; import { getInfoPageCopy } from '../../info-page-i18n'; @@ -69,6 +69,17 @@ const tiers = [ const allAgents = tiers.flatMap((t) => t.agents); +// Agents with a dedicated detail page, mapped slug -> route segment. +// The route can differ from the slug (e.g. `codex` -> `codex-design`) +// to put the design keyword in the URL. Keep in lockstep with the +// `pages/agents//index.astro` directories. +const DETAIL_ROUTES: Record = { + 'claude-code': 'claude-code-design', + codex: 'codex-design', + cursor: 'cursor-design', + opencode: 'opencode-design', +}; + const localizedCredentialLabels: Partial>> = { zh: { 'claude-code': 'Anthropic API key(BYOK)或 Claude 订阅', @@ -134,13 +145,24 @@ const credentialLabel = (agent: (typeof allAgents)[number]) => { return localizedCredentialLabels[locale]?.[agent.slug] ?? `${common.byok} · ${agent.vendor}`; }; +// JSON-LD URLs must match the locale-specific canonical the Layout emits, so +// build them from the localized path rather than the hard-coded English route. +const homeUrl = new URL(href('/'), SITE).toString(); +const hubUrl = new URL(Astro.url.pathname, SITE).toString(); +// Agents with a dedicated leaf page advertise it as the canonical destination; +// the rest keep the in-hub anchor until they get one. Both stay locale-aware. +const agentItemUrl = (slug: string) => + DETAIL_ROUTES[slug] + ? new URL(href(`/agents/${DETAIL_ROUTES[slug]}/`), SITE).toString() + : `${hubUrl}#${slug}`; + const jsonLd = [ { '@context': 'https://schema.org', '@type': 'BreadcrumbList', itemListElement: [ - { '@type': 'ListItem', position: 1, name: 'Open Design', item: SITE }, - { '@type': 'ListItem', position: 2, name: page.breadcrumb, item: `${SITE}agents/` }, + { '@type': 'ListItem', position: 1, name: 'Open Design', item: homeUrl }, + { '@type': 'ListItem', position: 2, name: page.breadcrumb, item: hubUrl }, ], }, { @@ -152,7 +174,7 @@ const jsonLd = [ '@type': 'ListItem', position: idx + 1, name: a.name, - url: `${SITE}agents/#${a.slug}`, + url: agentItemUrl(a.slug), })), }, ]; @@ -165,7 +187,7 @@ const jsonLd = [ {page.breadcrumb} -
    +
    {page.label}

    {page.heading(allAgents.length)}

    @@ -175,24 +197,17 @@ const jsonLd = [

    {page.adaptersTitle}

    {page.adaptersBody}

    +
      + {allAgents.map((a) => ( +
    • +

      {DETAIL_ROUTES[a.slug] ? {a.name} : a.name}

      +

      {page.vendor}: {a.vendor}

      +

      {page.credential}: {credentialLabel(a)}

      +
    • + ))} +
    - {tiers.map((tier) => ( -
    -

    {tier.label}

    -

    {tier.blurb}

    -
      - {tier.agents.map((a) => ( -
    • -

      {a.name}

      -

      {page.vendor}: {a.vendor}

      -

      {page.credential}: {credentialLabel(a)}

      -
    • - ))} -
    -
    - ))} -

    {page.byokTitle}

    {page.byokLead}

    diff --git a/apps/landing-page/app/pages/agents/opencode-design/index.astro b/apps/landing-page/app/pages/agents/opencode-design/index.astro new file mode 100644 index 0000000000..a3e1971af5 --- /dev/null +++ b/apps/landing-page/app/pages/agents/opencode-design/index.astro @@ -0,0 +1,301 @@ +--- +/* + * /agents/opencode-design/ — agent detail page (industrial long-form). + * + * Captures "opencode design", "opencode for frontend", "design with opencode" intent and drives to Open Design. When the + * agent guide carries a `rich` payload this renders the deep how-to + * layout (hero CTA + sectioned long-form + images); otherwise it falls + * back to the compact layout. Linked from the `/agents/` hub. + * + * All copy and resource links come from `copy.agentGuides['opencode']`; + * never fabricate URLs or facts here. + */ +import Layout from '../../../_components/sub-page-layout.astro'; +import { getInfoPageCopy } from '../../../info-page-i18n'; +import { localeFromPath, localizedHref } from '../../../i18n'; + +const SLUG = 'opencode'; +const ROUTE = 'opencode-design'; +const SITE = Astro.site?.toString() ?? 'https://open-design.ai/'; +const REPO = 'https://github.com/nexu-io/open-design'; +const REPO_RELEASES = `${REPO}/releases`; +const locale = localeFromPath(Astro.url.pathname); +const href = (path: string) => localizedHref(path, locale); +const copy = getInfoPageCopy(locale); +const common = copy.common; +// Compact locales fall back to the English guide rather than crash on undefined. +const page = copy.agentGuides[SLUG] ?? getInfoPageCopy('en').agentGuides[SLUG]!; +const rich = page.rich; + +// Localize CTA action hrefs while leaving external links untouched. +const ctaHref = (a: { href: string; external?: boolean }) => + a.external ? a.href : href(a.href); + +const faqEntries = (rich?.faq ?? page.faq).map(({ name, text }) => ({ name, text })); + +// JSON-LD URLs must match the locale-specific canonical the Layout emits, so +// build them from the localized path rather than the hard-coded English route. +const homeUrl = new URL(href('/'), SITE).toString(); +const agentsHubUrl = new URL(href('/agents/'), SITE).toString(); +const pageUrl = new URL(Astro.url.pathname, SITE).toString(); + +const jsonLd = [ + { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: [ + { '@type': 'ListItem', position: 1, name: 'Open Design', item: homeUrl }, + { '@type': 'ListItem', position: 2, name: 'Agents', item: agentsHubUrl }, + { '@type': 'ListItem', position: 3, name: page.breadcrumb, item: pageUrl }, + ], + }, + { + '@context': 'https://schema.org', + '@type': 'Article', + headline: page.title, + description: page.description, + url: pageUrl, + isPartOf: { '@id': `${SITE}#website` }, + }, + { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: faqEntries.map(({ name, text }) => ({ + '@type': 'Question', + name, + acceptedAnswer: { '@type': 'Answer', text }, + })), + }, +]; +--- + + + + +
    + {rich ? ( + <> + {/* Single-column article header: full-measure heading + lead + CTA, + then a full-width hero banner. One measure / one left edge so the + heading never wraps mid-word and the body never feels offset. */} +
    + {page.label} +

    {page.heading}

    +

    {page.lead}

    +
    + {rich.heroCtaActions.map((a) => ( + {a.label} + ))} +
    +
    + + {rich.heroImage ? ( +
    + {rich.heroImage.alt} +
    + ) : null} + +
    +

    {rich.heroCtaLead}

    + {rich.intro.map((p) => (

    {p}

    ))} +
    + + + + {rich.sections.map((section) => ( +
    +

    {section.heading}

    + {section.blocks.map((block) => { + if (block.kind === 'p') return

    {block.text}

    ; + if (block.kind === 'ul') return
      {block.items.map((i) => (
    • {i}
    • ))}
    ; + if (block.kind === 'ol') return
      {block.items.map((i) => (
    1. {i}
    2. ))}
    ; + if (block.kind === 'steps') + return ( +
      + {block.items.map((i) => (
    • {i.label}: {i.body}
    • ))} +
    + ); + if (block.kind === 'code') + return ( +
    {block.code}
    + ); + if (block.kind === 'image') + return ( +
    + {block.alt} + {block.caption ?
    {block.caption}
    : null} +
    + ); + if (block.kind === 'table') + return ( +
    + + + {block.columns.map((c) => ())} + + + {block.rows.map((row) => ( + + {row.map((cell, ci) => ( + ci === 0 ? : + ))} + + ))} + +
    {c}
    {cell}{cell}
    +
    + ); + return null; + })} +
    + ))} + +
    +

    {rich.faqTitle}

    +
      + {faqEntries.map(({ name, text }, idx) => ( +
    1. +
      + + {String(idx + 1).padStart(2, '0')} + {name} + + +

      {text}

      +
      +
    2. + ))} +
    +
    + +
    +
    +

    {rich.ctaTitle}

    +

    {rich.ctaBody}

    +
    +
    + {rich.ctaActions.map((a) => ( + {a.label} + ))} +
    +
    + ● {common.apache} + {common.localFirst} · {common.byok} + {rich.hubLinkLabel} +
    +
    + + ) : ( + <> +
    + {page.label} +

    {page.heading}

    +

    {page.lead}

    +
    + +
    +

    {page.tldrTitle}

    +

    {page.tldrBody}

    +
    + + + +
    +

    {page.aboutTitle}

    + {page.aboutBody.map((paragraph) => (

    {paragraph}

    ))} +
      +
    • {page.vendorLabel}: {page.vendor}
    • +
    • {page.credentialLabel}: {page.credential}
    • +
    +
    + +
    +

    {page.designTitle}

    +

    {page.designLead}

    +
      + {page.designPoints.map((item) => (
    1. {item.label} {item.body}
    2. ))} +
    +
    + +
    +

    {page.linksTitle}

    +

    {page.linksLead}

    +
      + {page.links.map((l) => ( +
    • + {l.label} + {l.source} +
    • + ))} +
    +
    + +
    +

    {page.withOdTitle}

    +

    {page.withOdLead}

    +
      {page.withOdSteps.map((step) => (
    1. {step}
    2. ))}
    +

    {page.withOdClosing}

    +
    + +
    +

    {page.faqTitle}

    +
      + {page.faq.map(({ name, text }, idx) => ( +
    1. +
      + + {String(idx + 1).padStart(2, '0')} + {name} + + +

      {text}

      +
      +
    2. + ))} +
    +
    + +
    +
    +

    {page.ctaTitle}

    +

    {page.ctaBody}

    +
    + +
    + ● {common.apache} + {common.localFirst} · {common.byok} + {copy.agents.breadcrumb} +
    +
    + + )} +
    +
    diff --git a/apps/landing-page/app/sub-pages.css b/apps/landing-page/app/sub-pages.css index 9ebf120d37..a6d0bd5e93 100644 --- a/apps/landing-page/app/sub-pages.css +++ b/apps/landing-page/app/sub-pages.css @@ -1120,7 +1120,7 @@ body.sub-page { .info-page { max-width: 920px; } -.info-page .info-section + .info-section { margin-top: 64px; } +.info-page .info-section + .info-section { margin-top: 44px; } .info-page h2 { font-family: var(--serif); font-weight: 600; @@ -2358,3 +2358,238 @@ dialog.tpl-share-popover .detail-share-dialog-text { grid-template-columns: 1fr; } } + +/* --------------------------------------------------------------------------- + * Agent detail — industrial long-form layout (`/agents/-design/`). + * Opt-in: only rendered when an agent guide carries a `rich` payload. Hero + * CTA strip leads with the product, deep sections carry prose + code + images. + * ------------------------------------------------------------------------- */ +.agent-hero-cta { + margin: 4px 0 8px; + padding: 22px 24px; + border: 1px solid var(--ink); + background: var(--paper-warm); + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 16px 20px; +} +.agent-hero-cta p { + flex: 1 1 320px; + margin: 0; + font-family: var(--sans); + font-size: 15px; + line-height: 1.6; + color: var(--ink-soft); + max-width: 60ch; +} +.agent-hero-cta-actions { + display: flex; + flex-wrap: wrap; + gap: 10px; +} +.agent-intro p { + font-size: 16.5px; + color: var(--ink-soft); +} +.agent-section-img { + margin: 22px 0 6px; +} +.agent-section-img img { + display: block; + width: 100%; + height: auto; + border: 1px solid var(--line, rgba(20, 18, 11, 0.12)); + border-radius: 8px; + background: var(--paper-warm); +} +.agent-section-img figcaption { + margin-top: 8px; + font-family: var(--sans); + font-size: 13px; + line-height: 1.5; + color: var(--ink-faint); +} +.agent-code { + margin: 0 0 18px; + padding: 16px 18px; + border: 1px solid var(--line, rgba(20, 18, 11, 0.12)); + border-radius: 8px; + background: #14120b; + overflow-x: auto; +} +.agent-code code { + font-family: var(--mono); + font-size: 13px; + line-height: 1.65; + color: #f0ede4; + white-space: pre; + background: none; + padding: 0; +} +.agent-steps { + list-style: none; + margin: 0 0 18px; + padding: 0; +} +.agent-steps li { + position: relative; + padding-left: 1.4em; + margin-bottom: 10px; + font-size: 15px; + line-height: 1.7; + color: var(--ink-soft); +} +.agent-steps li::before { + content: "—"; + position: absolute; + left: 0; + color: var(--coral); +} +.agent-steps li strong { color: var(--ink); } +@media (max-width: 600px) { + .agent-hero-cta { padding: 18px; } + .agent-hero-cta-actions .btn { flex: 1 1 auto; text-align: center; } +} + +/* Unify list styling inside agent long-form sections: bare
      /
        share the + * same rhythm and coral marker as `.agent-steps`, so a section that mixes both + * (steps + facts list) reads as one consistent list family rather than two. */ +.solution-page .info-section ul, +.solution-page .info-section ol { + list-style: none; + margin: 0 0 18px; + padding-left: 0; + max-width: 70ch; +} +/* The coral dash / number markers are only for plain prose lists. Components + * that ship their own layout and numbering — the FAQ (.faq-list), the how-to + * steps (.solution-steps), and the template / system galleries + * (.solution-tpl-grid / .solution-system-grid) — keep the list-style reset + * above but opt OUT of the marker + indent below, so they don't get a + * duplicate coral counter or a stray dash shifting their cards. */ +.solution-page .info-section ul:not(.solution-tpl-grid):not(.solution-system-grid) li, +.solution-page .info-section ol:not(.faq-list):not(.solution-steps) li { + position: relative; + padding-left: 1.4em; + margin-bottom: 10px; + font-size: 15px; + line-height: 1.7; + color: var(--ink-soft); +} +.solution-page .info-section ul:not(.solution-tpl-grid):not(.solution-system-grid) li::before { + content: "—"; + position: absolute; + left: 0; + color: var(--coral); +} +/* Ordered prose lists keep their number, coral, in a monospace marker. */ +.solution-page .info-section ol:not(.faq-list):not(.solution-steps) { + counter-reset: agent-ol; +} +.solution-page .info-section ol:not(.faq-list):not(.solution-steps) li { + padding-left: 1.9em; + counter-increment: agent-ol; +} +.solution-page .info-section ol:not(.faq-list):not(.solution-steps) li::before { + content: counter(agent-ol) "."; + position: absolute; + left: 0; + font-family: var(--mono); + font-size: 13px; + font-weight: 600; + color: var(--coral); +} +/* steps and the unified lists now share one look; keep steps' bottom margin + * tight when it directly precedes a fact list in the same section. */ +.solution-page .info-section .agent-steps + ul, +.solution-page .info-section .agent-steps + ol { margin-top: 2px; } + +/* --------------------------------------------------------------------------- + * Solution + agent pages: single-column text content fills the section and + * lines up with the full-width hero / feature rows / tables / template grid, + * instead of stranding in a ~707px column pinned hard left (the 70ch ul/ol + * prose cap above is meant for genuine bullet lists but also catches the FAQ + * list and how-to steps, which should fill). Prose is justified so both edges + * sit flush. Genuine prose bullet lists keep the readable 70ch measure. + * ------------------------------------------------------------------------- */ +.solution-page .info-section > p, +.solution-page .info-section .faq-list, +.solution-page .info-section .solution-steps, +.solution-page .solution-step-text p { max-width: none; } +.solution-page .info-section > p { + text-align: justify; + text-justify: inter-character; +} +/* Let the step's text column grow to the section's right edge so the step body + * lines up with the FAQ rows and the feature/compare tables above and below. */ +.solution-page .solution-step-text { flex: 1 1 auto; min-width: 0; } +/* The template grid inherits the narrow ~706px cap from the catalog `.tpl-grid` + * (built for the dense /templates/ index), which strands its three columns in + * the left half of the wide solution canvas. Drop the cap so the grid fills the + * section and its cards line up with everything else. */ +.solution-page .info-section ul.solution-tpl-grid, +.solution-page .info-section ul.solution-system-grid { max-width: none; } + +/* --------------------------------------------------------------------------- + * Agent rich page is a long-form ARTICLE, not a solution marketing page: ONE + * centered single-column measure for everything — heading, hero banner, intro, + * TOC, how-to sections, FAQ, CTA all share the same width and the same left + * edge. This avoids the two failure modes of a wide solution canvas: prose + * stranded in a narrow column pinned hard left (huge empty right), and a wide + * 2-column hero whose heading wraps mid-word and whose left edge doesn't line + * up with the narrower body below it. + * ------------------------------------------------------------------------- */ +.info-page.solution-page.agent-rich { + max-width: 1080px; + margin-inline: auto; +} +/* Everything fills the single measure — drop the inherited 70ch prose caps + * (.info-page p, .solution-page .info-section > p) so the intro, section + * paragraphs, and lists all reach the column's right edge and line up with the + * full-width hero banner instead of re-stranding in a ~640px column. */ +.agent-rich .agent-intro p, +.agent-rich .info-section > p, +.agent-rich .info-section ul, +.agent-rich .info-section ol { max-width: none; } + +/* Justify body prose so both the left AND right edge sit flush — the ragged + * right edge of plain left-aligned text reads as sloppy for CJK copy. Lists + * and captions stay left-aligned (their markers want a hard left edge). */ +.agent-rich .agent-intro p, +.agent-rich .info-section > p { + text-align: justify; + text-justify: inter-character; +} + +/* Header fills the full measure too — override the shared .catalog-head 880px + * cap and its 720px lead cap so the heading, lead, hero banner, and body all + * share one left edge and one right edge. Nothing in the article is narrower + * than anything else. */ +.agent-rich-head { margin-bottom: 4px; max-width: none; } +.agent-rich-head .lead { max-width: none; } + +/* Hero banner: full-width editorial illustration under the header. The agent's + * own mark is baked into the illustration's central hub, so no overlay needed. */ +.agent-hero-banner { + margin: 28px 0 6px; +} +.agent-hero-banner > img { + display: block; + width: 100%; + height: auto; + aspect-ratio: 16 / 9; + object-fit: cover; + border: 1px solid var(--line); + border-radius: 14px; + background: var(--paper-warm); +} + +/* --------------------------------------------------------------------------- + * Agents hub (/agents/) — all adapters in one grid, no tier split. Tighten the + * vertical rhythm: the page is a long list of short sections, so the shared + * 44px info-section gap reads as too airy here. + * ------------------------------------------------------------------------- */ +.agents-hub .info-section + .info-section { margin-top: 30px; } +.agents-hub .info-section > p { margin-bottom: 14px; } +.agents-hub .agent-grid { margin-top: 18px; } diff --git a/apps/landing-page/public/_redirects b/apps/landing-page/public/_redirects index 3fc5aa23b8..2de9e4a120 100644 --- a/apps/landing-page/public/_redirects +++ b/apps/landing-page/public/_redirects @@ -162,3 +162,17 @@ /ko/skills/* /ko/plugins/skills/ 301 /ko/systems/* /ko/plugins/systems/ 301 /ko/templates/* /ko/plugins/templates/ 301 + +# Agent detail route migration: the per-agent pages moved from +# `/agents//` to `/agents/-design/` (design keyword in the URL) and +# the old Astro generators were removed. These 301s preserve any inbound links +# / SEO equity for the old paths, at the root and under every locale prefix. +# trailingSlash:'always', so every source and target ends in '/'. +/agents/codex/ /agents/codex-design/ 301 +/agents/cursor/ /agents/cursor-design/ 301 +/agents/claude-code/ /agents/claude-code-design/ 301 +/agents/opencode/ /agents/opencode-design/ 301 +/:locale/agents/codex/ /:locale/agents/codex-design/ 301 +/:locale/agents/cursor/ /:locale/agents/cursor-design/ 301 +/:locale/agents/claude-code/ /:locale/agents/claude-code-design/ 301 +/:locale/agents/opencode/ /:locale/agents/opencode-design/ 301 diff --git a/apps/landing-page/public/agents/claude-code-design/claude-code-design-hero.webp b/apps/landing-page/public/agents/claude-code-design/claude-code-design-hero.webp new file mode 100644 index 0000000000000000000000000000000000000000..6925d45ca3df027cb5f9f48332ba079e0945ff20 GIT binary patch literal 127742 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�H)=yp!@bhdEepP5 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 literal 0 HcmV?d00001 diff --git a/apps/landing-page/public/agents/codex-design/codex-design-taste-triangle.webp b/apps/landing-page/public/agents/codex-design/codex-design-taste-triangle.webp new file mode 100644 index 0000000000000000000000000000000000000000..52dc3790d714b2b7be5ec7fa83a4c03fcdc7fc01 GIT binary patch literal 115772 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 z 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 z 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 WZlXkHz*buuwOC2{IMW?OJOBWzx&_1l literal 0 HcmV?d00001 diff --git a/apps/landing-page/public/agents/codex.svg b/apps/landing-page/public/agents/codex.svg new file mode 100644 index 0000000000..c77ccfdd90 --- /dev/null +++ b/apps/landing-page/public/agents/codex.svg @@ -0,0 +1 @@ +Codex \ No newline at end of file diff --git a/apps/landing-page/public/agents/cursor-design/cursor-design-hero.webp b/apps/landing-page/public/agents/cursor-design/cursor-design-hero.webp new file mode 100644 index 0000000000000000000000000000000000000000..aa4525bcb525c7f30b76490daa67549d81abdff0 GIT binary patch literal 167080 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ȵ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⁣jRvK#m&dx?G<$FjsZE>jAGI+?sq1Ax~ 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 MkB^jLc3c1e0Nd~yH~;_u literal 0 HcmV?d00001 diff --git a/apps/landing-page/public/agents/cursor-design/cursor-design-setup-flow.webp b/apps/landing-page/public/agents/cursor-design/cursor-design-setup-flow.webp new file mode 100644 index 0000000000000000000000000000000000000000..9f268693f2610a9fca77bf5426b6c09a6bf348f1 GIT binary patch literal 88372 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�H)=yp!@bhdEepP5 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 literal 0 HcmV?d00001 diff --git a/apps/landing-page/public/agents/cursor-design/cursor-design-taste-triangle.webp b/apps/landing-page/public/agents/cursor-design/cursor-design-taste-triangle.webp new file mode 100644 index 0000000000000000000000000000000000000000..52dc3790d714b2b7be5ec7fa83a4c03fcdc7fc01 GIT binary patch literal 115772 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 z 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 aQCSOId%YSGSCe|313ga7~`^Rih0 literal 0 HcmV?d00001 diff --git a/apps/landing-page/public/agents/opencode-design/opencode-design-setup-flow.webp b/apps/landing-page/public/agents/opencode-design/opencode-design-setup-flow.webp new file mode 100644 index 0000000000000000000000000000000000000000..9f268693f2610a9fca77bf5426b6c09a6bf348f1 GIT binary patch literal 88372 zcmXtfV{|4>v~`k+ZQHi(iOq>^+qP|66Wg{Ywr%sddGGzc{?)5$RrNWi_O9-=ceRqF zxHzpQFp#>Ku!5QbCn4d_y*(&s4lp$kI1nhmBx$@jaUoGb!SboO0u+>m8Eb(7f&>7d zr&sBBmGc{Ln0E&Faw-RWt3h=G0Lz1K-Ms0SCt(0UW!yD~-@UBPl+-_V)`z@TKeKN@ zRkzpo1z?uZP91PDm-o$!^W6#P>Gp&b_&A>ZpijrQ71(ob0|2JfpLPI_+%MCcHxzDq z#{x{f{T}vK%EP|G-$xH;*&|#Jh7SZwes=(`&%f_DA8A)C@3n7v@4CAJ<-PU%Pu(VP|gD)c6X5V?&0-X%E`1!pn0>>^D?-0HR@6O*BpIm-AfV7V!z{<8f0AOYY(+ZG( z(2Es7_pSQweIr2f#n0=@H47%AO@MjnYkCQC}L+e*0$Bo=uO>c#@88!HeHf27w*s#M zqkeT?8}Fe2X@J{1;6*Jq?!5pce%<{v{aia{0Dy;HCjsE= zpx40<5MpF&$oxDntsPy1+DA9BIbJ#DPQ5q*!jT^Sxa;O%k1LZ>V-3}-B_vvVj)KMG z)_G-XZfo4#$lEM{Ssv)O0bFV-_%m#nk=!U*u(lSp7&iVcs-(z4o&{h%)nB{mfz+{B z-oH-e4`s3pw)nS6>DPYE1nLg(SK_iF9(m%mR3aj@-&c>1tN`Z7Zw4=7Og}av9Wm6R z1c-L685Jt^)|Ix$CI(85b*Yp;@XH{7Zt%YK?B_L%Uaulo$9;}SDG0$#xoJ(k{^=FW zn->p$@V}{fpa&>_p@aTPP?{UiU8nMUA&%~DQU+?XPT;sJ14;wJCow>r(hgBnhDs!yQW zxSxRv2Gc0p!3gYv>pASr9;pw{I<*pSr5`nw){=AzBkZTL!{#I zi|1)>Dj6y>bVZbc?QAjq6++wv9&xO%ksF20-R{4KNyFb{oBj1dUN3FK;JW&(SIh#b z&`7PZvqFli73>O^2yESZUCG#F9G})|150hPn1;?a#JC>e5*SAyJwP=_X!*d)b0OB1 zSWP}^dI*$|I%+aNz+y!fGVGHGD1r#M^ic z;q37n655(E(L!r4ZP%E}cI^nCez|nNx_+)046_nFh)gd&`ct1@JX4^%SKV1cH2%E31SIe^uSi4qw z?#(at(tHrLNxgRNrk(Vx<+aix!ltjLx*l2yHxuix%Zg$=se-=pX+?Bkn0B=MGI~^7 zT_ODCV^IjMs3{%xi9$QB+2)>tdPK$&AT0WH1RyI;)S=(!Y_(tk!U>P*gDU1)-HfjB z_&pD)7sqgVjOd1CbfrhT4ru~I&$y_xaIKemfKtjUfM8YS&7P zK}8LA!IY$#{kE3!>Sorg!vDl*i9Q+8tTX1$E(~C2-4bw~j82IvnbIKuuq=3^5Vd@3 zZQCi-OYK&gc1i(SDOz3H6CbT*IhK;Gc~4APN^;4mk4J_{fyz3}oCe5eKtsH)8=csd zh(uSZB`>eyonY9^ZJ`h^GE0RqLCd=6wkP7f(N_Fa0_tqNeh?cFiUh;u!aZ}}oJ=q4 zRYp6_G7W3Gid2 zT)e|juM!K;WnX{J~ zrz6q!*=lzHk%|biQ-lD2D5Qb8co!TfF9}fuXl0gFlq=gJZl%#O&ZvEm|2Q{HIb2x? zpVkUCP3i6>f0)Y3{@1)%yCOsMIpg4xnoLF;t7%>g?p60VM){Wmb_zK#9fq%Fv}%$w zGf^%z(lop;omO$U;Adko|Ew7AD;=^NC%md`6O(}j85*IeEl%wum&Ke%`2yC!P3p<8 ziUO-HWP+q?`>r!17qfv|Jh7YbQcvw>^d}X_%5Kx#WB8Z?5MGyv<@^o4%!i4|&Dn4k z-~qFpr}DWMBA9^>>z8cll@(yp~JMG2gxER#dLs$9~-C zq)En_di^byS+LU@WJ;xzO#X&i2H3PFujBm{C|?=A=xTBR1{Sj+>pV+)h(4_i_6S5B zBsUlP?ORkasK*fQW>NY>FPfd1l*JM)&l`}ocM#xuP^zRy(7=|R{&=Ngc9^kj$`nIJ zQ`v^@YhZ>04>9A?HV2vyIZK9Rs{V^+GX)l+KG-9G~u3h z54$7Ys@h{~LO&fsNUa>Gge>Y)5Wd|Y6M4l?SO#_*-uSc-_RdoIb%|x;f$+nRAI^nh zPOX3^vpxbcpVS8M+w(pY(vjho?K^@5{gk8^6`8+U3TH=YKj9*bkS}=R2qi(aqz`tU=!c0^p^3?HGqStm4kEz|USkrMC ze}`FZTt(JPP6Jc^_UYAq39LdZ%{`2mGYTY<*+Urj{3n(B2vwi(Tnh#0f!O`Hi~Do= z`c4<+y@Z06^WCvPk;2Y6;JnhOY1XpxZyw_5zqywo&c|awTSxNC=t5OWi$BhenkwAq zO)Hg_(p%$1v`@0A zq~;q)bU_xC!G`Exe^!5@Kk@Y{igUykyWc}M_7a_-XlB~ih14Z!_M%E5{0CF@RG zV=p+6t!ap;-?xWiMRVJJNs2~@w6)1qAp;p9z{; zed*Fdcbszx7a#MT!*Hynws$T4%psBL4sDGTl*Zud4#(UlxOk@9d;`h*B+vj2a8ZAz zN!S^X(8lp3qW#pcuhzaWvras|k$;2!=KTb3Pb)ZN-F(^|)ik4)J#rn;2hb-|j(L3M z^zJWKmpi9g9e#&5gpagXh&)9POfmD>j}DW09k@ zuxZ|MHQL2jM89XB;-t)uaA+&Yz|~H%@+Z2(T(lbyu=yQE*oitx7t>w8kB0ia7J)ot z#c60!%^?o`2`K`}dJ zw#?I$2~cBH0h2SXj*wa4i@nVV{WTpCP9{c}@#FBMPS6j=W?o9TPMv5Q0d+OORZyR@ z6AR(nRACTNFeJ_Gy6QZm6C4up=3WG!BaMz=dg zWQ$Jj&<4}fo4KMWt~N4q^PLy}cgk_LEIA^Re(F(C;u18D5ouI4w9$v+7T{6+QBVH9 z8VuPO(d^3)ChTLf-o&*1UVp??v2)KK)7lKeY_RsYlIj?eFCUQXV zk~&yw*~V;wH1GC2?Ox!f9Tcw@)~cVmYtfpO-YDe@cDkV`L(rfB4js~b?=vYkL?$f;vB}tH2xwy*S7Z`xLkN0 zq+st(O`^^2OnWCbmv4(y9LhM3^_~T>Ke0I2aT}~Gsp=0IVOrVs(2?59>h0P7-4f*i0N-)je;gmlNj{M5u0V$rUPG#DU~uhlb=zVb{Xg$Dp4xu{TI&9Z zkysES7SePjxFmzmg-C(6gdku1-R%WvInF{aRVmU&C6Eh-Sii=1wxJOG-og_@^0TVA zAyA$v!nYk1s3B@+afNze3JP?^!}Y`;-BjnM$Bk6yR+>#wdOJ1zWDKMFlh14Zk&v)I zdfCU?1qI5wUl$_K>RC^|s4a{cpt`+`TW8A8Zjn7PEOc`XIv#P!1@dfY`_HQ+W?#aH zjg!u8(E|X%L^Vf%2jCUjfs9^8K=%AYs**?owP*arp6RI+J6xywW{aO==;v1S6<|HkPLGpaINhU6iFeuKDw65CkcOd z8^q3({V;AjL+fmFTG|{ntMbq@^(Ld{~5_kf^tQ5iCDlF!Bt#X)W6qz z^(LYc%pTX@)6x#UI?xk5>~cTR7l&yzzFn_9D-TO>j561#KNBgaT5X{rj7*mI&?MDUOtRCYDa9Tj+mL5Y0y^nkodJ6ceG%4PSH-xDmLhaBf5q z-OD`(h2n^m?Bg;OR$b|Hm4ybVdRR)grxQWf%u(sqh%YFc_=uW0Jlybfn3-j-IkM5` z>|iv1C{8@GSiJe&s#PC~QzBLXe;ZU(@lLO$YO`cXe-xA3QXWt!Z?@;vF&G?Mq=V~Y zPO?he8apjHEt65j&Ca-yTpGsM_E-U3=*`a0` z3Ai8~()FQoz@c_|g@{K76yx6hBkJi&G7Z7@#z}_sGP#8)u1R%;gcP-do=hu5pHg%*C0o< za>20LzN9LEPfLHGMZKweSA}U^>G%QOm5*fj?bMNa8H+1rKLY%m>wnweobbLB3{Jk` zECG)Vn^g2_Cb@NF$W&(6ODHcilKUnuN)bD}TiJisyY0U<>{3LCb7D^M>u@iDTP+Rr z@0Be*`0cvK<4Ct;EDnA-H?eEIY!jRi9S{*H`e>G!Pm~?TZ;1&NaHTJs0=jC}R|-U) z(7yOVn{%D?Q-N$ntlh+F63iOvZz~T+WTsEDo0pZE$r2(S zaBk%oY0zF&P&u0Ja03>Z9-fkn#CrjpBqPH3K2J{efJiS7F+3!~$d zduL6=Z=n^#{r<7Ey#R7udF!VQ(wBu+mgx2Z(kP)0o?9vEZska$pV$SCc5?1ej&^(Z&M;?c$0# z1#rSryfFZzulxdUgo!7$D^q%K`2am2kSB#nV)z=mzuAM$f;@Js5`Qf?w(*Xqo7aaM z-x2H$7olzYGot;^R;N5@ks=?Ss;$r?Re>PdZDct&PWrgTqpUkC^)o?1mIT*INTzKb zMx!yXM-93N)W#H zV-NhTN8}zmd$YTr)3r|<^m`B6!c^0(`Ji-!?v=C`BbL*Qzb�H)=yp!@bhdEepP5 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 literal 0 HcmV?d00001 diff --git a/apps/landing-page/public/agents/opencode-design/opencode-design-taste-triangle.webp b/apps/landing-page/public/agents/opencode-design/opencode-design-taste-triangle.webp new file mode 100644 index 0000000000000000000000000000000000000000..52dc3790d714b2b7be5ec7fa83a4c03fcdc7fc01 GIT binary patch literal 115772 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 z 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