← Open DesignCONTENT HISTORY

Update to Open Design

Snapshot Sep 30, 2026 · 23:13 UTC · version 0.5.2

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "open-design-mode",
  "description": "Create and refine websites, slides, prototypes, and design systems through the local Open Design MCP. Use Open Design Cloud by default, or Local Codex and secure BYOK only when the user explicitly selects them.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 340
    },
    {
      "relative_path": "assets/open-design.png",
      "size_in_bytes": 77017
    }
  ],
  "skill_md_contents": "---\nname: open-design-mode\ndescription: Create and refine websites, slides, prototypes, and design systems through the local Open Design MCP. Use Open Design Cloud by default, or Local Codex and secure BYOK only when the user explicitly selects them.\n---\n\n# Open Design execution mode\n\nUse this workflow whenever a user asks the Open Design plugin to create\nor continue an artifact.\n\n## Required local boundary\n\nAll modes use the independently registered local `open-design` MCP server. The\nplugin does not include an MCP transport and does not call a remote MCP domain.\n\nOpen Design must be installed, but its Electron window does not need to be\nopen. A packaged MCP registration starts the signed Open Design runtime\nheadlessly when its daemon is stopped.\n\nIf `open-design` is unavailable:\n\n1. Check whether Open Design is installed and whether an `open-design` MCP\n   registration already exists. Preserve all unrelated MCP servers.\n2. If Open Design is missing, ask the user before opening the official download\n   page at `https://open-design.ai/download/`. Do not silently download or\n   execute an installer, and do not use an unverified install script.\n3. If Open Design is installed, use its resolved signed packaged executable\n   with `--headless --mcp-install codex`, or use the `od mcp install codex`\n   operation supplied by that installation. Do not guess a source checkout\n   path, a localhost URL, or run the unrelated macOS `/usr/bin/od` utility.\n4. Verify `codex mcp get open-design --json`. If the current Codex task cannot\n   hot-load the new MCP snapshot, tell the user to start one new task.\n\n## Choose the mode\n\nOpen Design Cloud is the default mode. It uses the local Open Design daemon and\nits bundled cloud runtime. Local Codex and BYOK are available only when the\nuser explicitly selects them.\n\nResolve the execution mode from the user's current request before calling\n`collect_brief`. An explicit choice such as Local Codex, Open Design Cloud, or\nsecure BYOK remains selected through Brief collection, confirmation, project\nselection, generation, polling, and terminal delivery for that logical\ngeneration.\n\nNever silently switch modes because authentication, balance, transport, quota,\nor generation failed. Explain the failure and offer the user applicable\nchoices, such as retrying the selected mode, completing its authentication, or\nswitching to another available mode. State when the alternative uses an Open\nDesign Cloud account or a BYOK provider account. Switch only after the user\nexplicitly confirms the new mode.\n\nAfter an explicit switch, start a new execution context and request identifier.\nReuse only the human-readable confirmed brief; never repeat its signed machine\nenvelope. The selected mode may change between logical generations, but one\nlogical generation must never drift between modes.\n\n## Keep implementation names out of user-facing copy\n\nMatch status updates, errors, and final delivery prose to the language of the\nuser's current request. In user-facing text, use only these product terms:\nOpen Design Cloud, Local Codex, secure BYOK, and Open Design Cloud account or\ncredits.\n\nSome MCP tool names and machine parameters below retain compatibility\nidentifiers such as `get_vela_login_status`, `start_vela_login`, and `amr`.\nTreat them as machine-only protocol values. Never quote, explain, or expose\nthose identifiers, raw agent selectors, internal endpoints, or service account\nnames in user-facing prose. Translate tool errors into the product terms above\nwithout changing the actual MCP argument values.\n\nBefore every `collect_brief` call, derive a normalized BCP-47 `locale` from the\nlanguage of the user's current message and pass it to the tool. For example,\nuse `zh-CN` for a Simplified Chinese request and `en` for an English request.\nUse the Host UI locale only when the current message language is genuinely\nindeterminate, then fall back to `en`. Keep question ids, option values,\nartifact types, and other machine fields unchanged across locales.\n\n## Start one attributed workflow\n\nThis first-party Git marketplace package uses this exact bounded\n`externalPluginContext`:\n\n```text\nexternalPluginContext = {\n  id: \"open-design\",\n  version: \"0.5.2\",\n  distributionMechanism: \"git_marketplace\",\n  publisherClass: \"open_design_first_party\"\n}\n```\n\nDo not add host names, paths, branch names, prompts, brief answers, account\ndata, or credentials.\n\n1. Send `externalPluginContext` with `collect_brief`. If the user explicitly\n   skips the interactive questions, still call `collect_brief` once with\n   `skip: true` and the same Context so the local MCP can establish attribution\n   before login, project, or run work begins.\n   For one logical artifact request, call `collect_brief` exactly once. If its\n   card is still loading, wait for that same card to receive its result; do not\n   issue a second `collect_brief` to replace it. Only a new artifact request or\n   an explicit user restart begins another Brief workflow.\n2. Preserve the server-issued `pluginWorkflowId`. The rendered Brief card\n   inherits the workflow through its draft; use the same `pluginWorkflowId`\n   returned after confirmation.\n3. Pass that exact `pluginWorkflowId` to every later login, agent discovery,\n   project, run, polling, and optional artifact-context tool call.\n4. Never invent an id, replace it after a retry, infer it from a project or\n   latest run, or attach it to an unrelated direct MCP call.\n\nIf the MCP rejects these fields or does not return a workflow id, stop and\nreport that this plugin requires Open Design 0.17.0 or newer. Do not remove the\ncontext, silently lose attribution, use a remote MCP, or change execution mode.\n\n### If the brief card cannot render\n\nThe MCP tool must remain usable when the Host cannot render its optional UI.\nIf Codex reports that the MCP app or its sandbox failed to load, do not call\n`collect_brief` again. Read `questionForm` from that call's structured result,\npresent the same labels and human-readable options as a compact plain-text\nquestion in the current task, and wait for the user's choices. Then call\n`confirm_brief` once with the original `briefDraftId`, `nonce`, normalized\nanswer values, locale, and workflow context.\n\nNever expose or ask the user to copy `briefDraftId`, `nonce`, option ids, a\nsigned confirmation, or other machine fields. This is a presentation fallback\nonly: it must preserve the same draft, attribution, execution mode, and\none-confirmation rule.\n\n## One confirmed action, one request\n\nAfter the brief and execution mode are confirmed, create one opaque stable\n`requestId` for that logical generation. Keep the exact `start_run` arguments\nand reuse both the arguments and `requestId` if the MCP response is lost or a\ntransport retry is required.\n\n- Call `start_run` once for the confirmed action.\n- Use only `get_run` to poll. Polling must never call `start_run` again.\n- Keep the same `requestId` and `pluginWorkflowId` for retries and recharge\n  resume. The workflow id attributes the whole Plugin journey; the request id\n  deduplicates one confirmed generation.\n- A changed prompt, project, confirmed mode, agent, or BYOK profile is a new\n  logical generation and receives a new `requestId`.\n- Never reuse a `requestId` with different arguments.\n- Never display a request id as user-facing content.\n\n## Keep the current task alive through terminal delivery\n\nAfter `start_run` returns a `runId`, preserve it and follow this gate in every\nmode:\n\n1. Inspect the exact `start_run` result and every later `get_run` result for\n   this `runId`. On Codex Desktop, as soon as the current run first returns a\n   `studioUrl` while `queued` or `running`, immediately open that exact URL\n   with the callable host-provided in-app Browser. Open it exactly once for\n   this run; later polls and terminal delivery must not open a duplicate tab.\n   If no `studioUrl` exists yet, keep polling instead of opening a URL copied\n   from another run or project.\n2. Continue polling the same `runId` with `get_run` and the same\n   `pluginWorkflowId`, normally every 30–60 seconds.\n3. Do not end the current task while `get_run` reports `queued` or `running`.\n   A concise progress update is allowed, but continue the polling loop in this\n   task. Never promise that a later message will arrive after the current task\n   ends.\n4. Stop polling only for a terminal state, an explicit recharge/user-input\n   boundary, or an explicit user request to cancel.\n5. For `succeeded`, prefer the exact `studioUrl` returned by this run and fall\n   back to the exact `previewUrl`. Render the selected value as a clickable\n   Markdown link. Never copy a URL from another run, project, tool history, or\n   a previously rendered output panel.\n6. If a successful result contains neither URL, say that the artifact was\n   generated but no usable delivery link was returned. Preserve the tool\n   result for diagnosis and do not claim complete delivery. Do not call\n   `get_artifact` merely to manufacture a link.\n7. For `failed` or `canceled`, report that terminal result clearly and do not\n   present a stale link as success.\n\nOn Codex Desktop, when no running-state Studio tab was opened but the host\nexposes a callable host-provided in-app Browser capability, immediately use it\nto open the selected terminal link exactly once before the final response. This\nis a required delivery fallback whenever that capability is available, not an\noptional suggestion, and must not wait for the user to ask for a preview or\nremind the agent to open it. Do not install another plugin, substitute the\nsystem browser, or claim the link was opened unless the Browser call succeeded.\n\nIn Codex CLI, when the Browser capability is unavailable, or if its call fails,\nreturn the clickable link and explain the open-action limitation without\ntreating it as a generation failure. Repeated polls, transport retries,\nrecharge resume, and repeated terminal reads must not open duplicate tabs for\nthe same deliverable.\n\n## Open Design Cloud workflow\n\n1. Start the attributed workflow above by calling `collect_brief` on the\n   `open-design` MCP server with the requested artifact type and a concise\n   project title.\n2. Let the user complete the rendered Open Design brief card. Use the readable\n   confirmed summary returned by the card; do not display or ask the user to\n   paste a signed confirmation token.\n3. Call `get_vela_login_status` with the workflow id. If signed out, call\n   `start_vela_login` with the same id, show the returned activation URL and\n   user code, then poll `get_vela_login_status` with the same id. The Open\n   Design GUI is not required.\n4. Call `list_agents` with the workflow id and require the machine-only `amr`\n   runtime selector.\n5. Check `get_active_context` or list/create the target project, always carrying\n   the workflow id.\n6. Create one `requestId`, then call `start_run` with that `requestId` and\n   `pluginWorkflowId`, plus `agent: \"amr\"`. Do not substitute `codex`,\n   `opencode`, `byok-opencode`, or another runtime.\n7. Follow the terminal delivery gate above for this exact run.\n\nNever request, copy, or store a cloud credential in chat or plugin files. Tell\nthe user that their Open Design Cloud account bears Cloud usage costs.\n\nIf `get_run` reports insufficient balance:\n\n1. Preserve the confirmed brief, project, run id, original `requestId`, and\n   original `start_run` arguments.\n2. Show the returned recharge URL and wait for the user to say that top-up is\n   complete. Do not loop automatically.\n3. After that explicit confirmation, call `start_run` with the exact original\n   arguments, `requestId`, and `pluginWorkflowId`, plus `resume: true`.\n4. Continue polling the same logical run with `get_run` and the same workflow\n   id.\n\nDo not create another project or logical run, and do not infer whether the\naccount was charged. Open Design Cloud owns the remote operation, credits, and\nbilling truth.\n\n## Local Codex workflow\n\nUse this only when the user explicitly chose Local Codex:\n\n1. Start the attributed workflow above and confirm the requested artifact type\n   and readable brief.\n2. Do not call `get_vela_login_status` or `start_vela_login` while Local Codex\n   remains selected. A Local Codex request must not enter the Open Design Cloud\n   sign-in or credit flow.\n3. Call `list_agents` and require the exact `codex` agent to be available and\n   authenticated, carrying the workflow id.\n4. Check `get_active_context` or list/create the target project with the same\n   workflow id.\n5. Build the `start_run` prompt from the user's confirmed brief, then append\n   this child-runtime boundary:\n\n   > This run is already the selected Local Codex execution inside Open\n   > Design. Work directly in the current Open Design project. Do not invoke\n   > `@open-design`, the `open-design` MCP server, `collect_brief`, Open Design\n   > Cloud login, or another Open Design Plugin workflow. Do not route this\n   > request through Open Design again.\n\n6. Create one `requestId`, then call `start_run` with that exact prompt,\n   `requestId`, `pluginWorkflowId`, `agent: \"codex\"`, and no BYOK profile or\n   credential.\n   Every `start_run` for a Local Codex logical generation, including an\n   identical transport retry, must carry `agent: \"codex\"` and reuse the\n   byte-identical prompt including the child-runtime boundary.\n7. Follow the terminal delivery gate above for this exact run.\n\nIf Codex CLI is missing, ask the user to install it. If its authentication is\nmissing or unknown, ask the user to run `codex login` and rescan agents. Local\nCodex does not use OpenCode and Open Design must never receive an OpenAI key.\nIf Local Codex is unavailable or out of quota, explain the cause and offer to\nretry after the user resolves it or to switch explicitly to Open Design Cloud\nor secure BYOK. Never invoke either alternative until the user confirms it.\n\n## Local BYOK workflow\n\nBYOK is a separate explicit mode, not a fallback:\n\n1. Start the attributed workflow above and confirm the requested artifact type\n   and readable brief.\n2. Call `list_byok_profiles` with the workflow id.\n3. If no profile exists, direct the user to Open Design Settings or the\n   stdin-only `od byok save --api-key-stdin` command.\n4. If multiple profiles exist, ask the user to choose by non-secret profile id.\n5. Check `get_active_context` or list/create the target project with the same\n   workflow id.\n6. Create one `requestId`, then call `start_run` with that `requestId`,\n   `pluginWorkflowId`, and only the non-secret\n   `byokProfile: \"<profile-id>\"` runtime selector.\n7. Follow the terminal delivery gate above for this exact run.\n\nNever ask for or include a raw API key, provider token, or credential-shaped\nvalue in chat, an MCP argument, a manifest, an environment example, or a\nplaintext file. Tell the user that their selected provider account bears BYOK\nusage costs.\n\n## Optional artifact context\n\nTerminal `get_run` is the default delivery path. Return its canonical Preview\nor Studio reference without forcing a source download.\n\nOnly when the agent genuinely needs source context and `get_artifact` is\nadvertised:\n\n1. Pass the same `pluginWorkflowId` to `get_artifact`; this optional call must\n   use the exact project returned by the linked run.\n2. Select an entry and bounded include/byte options appropriate to the task.\n   Treat `truncated: true` as partial context, not a complete project archive.\n3. Keep the workflow link in follow-up reasoning. Never infer it from the\n   project's latest run or substitute another run's project.\n\nIf `get_artifact` is absent, continue with the default Preview/Studio delivery.\nIts absence must not block Cloud, Local Codex, or BYOK generation.\n"
}

SHA-256: 2a45b75d25ec8feff00c5b10b32a9d0168d50a92ea7226b77236823439eb1b94