README advertised a Linux AppImage on GitHub Releases while
v0.16.1 and later stable releases only publish macOS/Windows
artifacts. Clarify that Linux users can run from source today
and that a prebuilt Linux release is pending, with links to
the source-run instructions and tracker #4368.
Fixes#6190
Replace every user-facing Feishu group entry (README, landing header and
hero community CTA for zh/zh-tw, launch-week page buttons, DeepSeek
Harness guide hero CTA in all locales, client nav-rail social slot for
zh-CN/zh-TW) with the Discord invite, and drop the now-unused Feishu
QR/mark assets, icon, i18n keys, CSS and analytics element value.
Claude-Session: https://claude.ai/code/session_017gVe9HtkaMhcPCvm3aX7Eg
Co-authored-by: Joey <236967869+joeylee12629-star@users.noreply.github.com>
The star history chart in the README and its localized translations currently fails to render because the upstream provider no longer serves it. This switches the chart image and its wrapping link to a working provider and keeps the existing dark and light variants, restoring the chart across all languages.
Co-authored-by: OctoBored <212877535+OctoBored@users.noreply.github.com>
* chore: unify product name display to OpenDesign repo-wide
Rename the user-facing product name from "Open Design" to "OpenDesign"
across documentation, web/desktop UI strings, i18n locales, prompts,
plugin/skill/design-system content, changelogs, and specs, matching the
landing-page rename already in flight.
Deliberately excluded so installed-app identity stays untouched:
- packages/release PRODUCT_NAME and everything derived from it
(app bundle names, installer/registry identity, updater feeds)
- tools/pack, tools/release, apps/packaged, landing page (PR #6983)
- mocks/ recorded traces and LICENSE
- test fixtures and comments that encode real on-disk install paths
(Open Design.app, Program Files\Open Design, AppData paths)
Validated with pnpm guard, pnpm typecheck, and targeted web/desktop/host
test runs over the renamed strings.
* fix(web): keep two-letter author monogram for CamelCase brand names
authorInitials split words on whitespace only, so the renamed single-token
author name "OpenDesign" produced a one-letter monogram. Treat lower-to-upper
CamelCase boundaries as word breaks so the avatar fallback stays "OD".
* fix(release): restore spaced Windows source artifact names in win.ps1
tools/pack still derives builder outputs from the unchanged PRODUCT_NAME
("Open Design"), so the asset script must look for the spaced filenames.
Matches the mac/mac-intel/linux asset scripts, which were already kept on
the original names.
---------
Co-authored-by: Joey <236967869+joeylee12629-star@users.noreply.github.com>
* feat(mcp): add claude-desktop to MCP install targets
Add 'claude-desktop' agent slug with JSON merge strategy.
Writes to the platform-appropriate config path:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
- Windows: %APPDATA%/Claude/claude_desktop_config.json
- Linux: ~/.config/Claude/claude_desktop_config.json
Claude Desktop has native MCP support and reads from
claude_desktop_config.json using the standard {mcpServers: {...}} schema.
Also updates README table and file header comment.
* fix(mcp): refuse claude-desktop on unsupported platforms
Claude Desktop is only available on macOS and Windows.
The planAgentInstall case now returns a ManualInstallPlan with
a clear reason on other platforms, instead of silently writing
to an invented ~/.config/Claude/ path.
Changes:
- planAgentInstall: branch on platform, return manual plan for
non-darwin/non-win32
- claudeDesktopConfigPath: remove Linux fallback path
- Tests: flip Linux test from json-write expectation to manual-plan
with unsupported-platform assertion
* docs: clarify Claude Desktop MCP config is macOS/Windows only
Update the unsupported-platform reason, test, and README footnote to say
automatic MCP configuration (not Claude Desktop itself) is currently
supported only on macOS and Windows. Claude Desktop is now available on
Linux (beta), but the authoritative local-MCP config path is not yet
documented for that platform.
Ref: https://support.claude.com/en/articles/10065433-install-claude-desktop
* feat(daemon): add OD_ALLOWED_INTERNAL_HOSTS allowlist for internal provider endpoints
Fixes#3225. The 0.8.0 SSRF hardening blocks provider base URLs that
resolve to private/internal ranges, with no way to opt a trusted host
out -- breaking internally-hosted LiteLLM/Ollama gateways on VPN-only
RFC1918 addresses.
Add an operator opt-in: OD_ALLOWED_INTERNAL_HOSTS exempts listed hosts
from the internal-IP guard, threaded only into user-configured provider
endpoints (connection test, model discovery, BYOK chat). The
attacker-controllable asset-download guard stays strict. Malformed and
CIDR entries are dropped with a warning rather than silently trusted.
The Settings base-URL field no longer rejects internal-IP URLs
client-side, deferring the authoritative decision to the daemon.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* test(e2e): update BYOK base-URL P0 for relaxed internal-IP validation (#3225)
The P0 spec used an internal-IP URL as its 'invalid' example to assert the
client-side error; that URL is now accepted (the daemon owns the allowlist
decision). Switch to a non-http scheme, which is still rejected client-side.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(web): defer internal-IP base URL to the daemon in BYOK draft validation (#3225)
isValidApiBaseUrl was relaxed, but the Test and model-fetch actions gate
on validateByokDraft -> blockingByokDraftIssues, which still treated any
validateBaseUrl error (including a forbidden internal IP) as a blocking
base_url_invalid. So the Test button appeared but the action stayed
blocked client-side and never reached the daemon allowlist. Treat a
syntactically-valid forbidden URL as non-blocking here too; genuinely
malformed / non-http URLs still block.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
GitHub targets a developer audience, so the repo README keeps the SEO keyword
as its lead; the Vibe Design Workspace umbrella lives on the website instead.
Restore the H1 and the What-is intro to the Claude-Design-alternative lead
(keeping the local-first placement and count-free phrasing), drop the extra
tagline line, and add the shipped 0.10.0-0.13.0 roadmap milestones.
Co-authored-by: Joey <276262049+xne998808-ai@users.noreply.github.com>
* docs: align README positioning with the Vibe Design Workspace umbrella
Lead with the product's own category (The Vibe Design Workspace) instead of the
competitor keyword, keeping 'open-source Claude Design alternative' as the
subtitle / SEO phrase. Move 'local-first' off the front of the main keyword to
describe the desktop app, and replace the hardcoded skill/system/plugin counts
in the hero alt and intro line with keyword phrasing (the counts stay in the
dedicated Skills / Design Systems sections). Scoped to the README top; the
translated READMEs under docs/i18n/ are a follow-up.
* docs: refresh the README release callout to 0.13.0 (Stay in Flow)
The top-of-README release blurb was still on 0.10.0, three releases behind
(0.11 The Bazaar, 0.12 Brand-backed Design System, 0.13 Stay in Flow). Update
it to 0.13.0 with its session-resume / model-picker / export-handoff theme and
point the links at the 0.13.0 download and release notes.
* docs: rename AMR to Open Design Cloud across the README
AMR (Agentic Model Router) has been folded into Open Design Cloud, so the
callout, top-nav link, and roadmap entry now say Open Design Cloud and point at
/cloud/ instead of /amr/. Also normalizes the one-word OpenDesign Cloud mention
in the 0.13.0 blurb.
* docs(i18n): rename AMR to Open Design Cloud across the translated READMEs
Mirror the EN README rename in all 13 localized READMEs (ar de es fr ja-JP ko
pt-BR ru th tr uk zh-CN zh-TW): the model-service callout, CTA, top-nav link,
and roadmap entry now say Open Design Cloud and point at /cloud/ instead of
/amr/. Brand name kept in English per convention.
* docs: join the README H1 value props with '&' instead of an em dash
* docs: unlink Claude Design mentions in the READMEs
The 'Claude Design' text was a reference link to an X/Twitter post. Drop the
link (and the shared [cd] reference definition) across the EN and 13 localized
READMEs so 'Claude Design' stays plain keyword text and we don't hand a
competitor an outbound backlink.
* docs: make the hero image alt text descriptive for screen readers
The hero alt had drifted into positioning/SEO copy that also no longer matched
the image. Rewrite it to describe what the banner actually shows — the
headline, the classical columns-and-figures artwork, and the stat cards — so
screen readers get an accurate description. Categories are named without
hard-coding counts.
* docs(i18n): refresh the translated README release callouts to 0.13.0
Sync the localized release banners from the stale 0.10.0 blurb to the 0.13.0
'Stay in Flow' announcement (session resume / faster model pick / export
handoff) across all 13 locales, matching the EN README and pointing at the
0.13.0 download + release notes. Resolves the EN/localized version divergence
at the README entry point.
---------
Co-authored-by: Joey <276262049+xne998808-ai@users.noreply.github.com>
Windows users running agent CLIs inside WSL were landing on the native Windows guide and copying the README MCP command directly, which left Linux /usr/bin/od shadowing, daemon origin, Node ABI, and Codex config parse failures unexplained. Add a WSL2 guide and teach the Codex config normalizer to drop nested feature tables that current Codex parses as maps instead of boolean flags.
Constraint: WSL agent CLIs need the same Linux environment for the wrapper, daemon, Node modules, and credentials
Rejected: Docs-only workaround | would leave daemon-launched Codex runs failing on nested features tables
Confidence: high
Scope-risk: narrow
Directive: Keep WSL-specific guidance separate from native Windows PowerShell troubleshooting
Tested: pnpm --filter @open-design/daemon exec vitest run -c vitest.config.ts tests/codex-config-normalize.test.ts
Tested: pnpm --filter @open-design/daemon typecheck
Tested: pnpm guard
Tested: git diff --check
Not-tested: Manual WSL2 end-to-end MCP install on a Windows host
Related: Fixes#4648
The "install into your coding agent" sections pointed users at
`curl -fsSL https://open-design.ai/install.sh | sh -s <agent>`, but that
URL returns 404 — the bootstrap script was never published, and a
standalone `od` CLI is not yet distributed. Every README (English + 12
i18n) shipped a copy-paste command that fails.
Replace it with the real, shipped command `od mcp install <agent>`,
matching the Platform Compatibility table already present in each file
("Once OD is installed, a single `od mcp install <agent>` ..."). The
surrounding "one-line install" comment stays accurate and the
install-OD-first prerequisite is covered by that table.
Co-authored-by: Joey <276262049+xne998808-ai@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(daemon): add Amp CLI as a coding-agent adapter
Amp (ampcode.com) runs headless via `amp -x --stream-json`, which emits
the Claude Code-compatible stream JSON format the daemon already parses,
with the prompt delivered over stdin. Add it as a coding-agent adapter
reusing the claude-stream-json parser; the model picker maps to Amp's
agent --mode (smart/deep/rush).
- new ampAgentDef + registry entry + install metadata
- web agent label/alias
- replay mock (renders via the claude renderer)
- docs adapter-catalog row + README CLI count (21 -> 22)
- adapter buildArgs/stream-format test
* fix(daemon): order Amp adapter at P2, not first-run default
Move ampAgentDef next to copilot (the other P2 local headless CLI adapter)
instead of the head of BASE_AGENT_DEFS. The daemon preserves AGENT_DEFS
order in /api/agents and the web app fills an empty config with
agents.find((a) => a.available), so listing Amp first made it the default
engine ahead of AMR/Claude/Codex for any user with amp on PATH and no
persisted agentId — inconsistent with its P2 classification. Reordering
restores the prior first-run default. Addresses PR review feedback.
---------
Co-authored-by: Siri-Ray <2667192167@qq.com>
* docs(readme): announce 0.10.0 and add AMR entry across all READMEs
* docs(readme): link Gemini CLI and Kimi CLI rows in agent compatibility table
* docs(readme): expand AMR acronym to Open Design Model Router in the AMR blockquote
* docs(readme): rename nav AMR link to Model Router and correct acronym to Agentic Model Router
---------
Co-authored-by: qiongyu1999 <2694684348@qq.com>
* chore(docs): move translated docs into docs/i18n/
Collect the translated README/QUICKSTART/CONTRIBUTING/MAINTAINERS files
(including the Korean set) into docs/i18n/, leaving only the English sources
in the repo root so the GitHub project home page file list stays clean.
Rewrite internal links for the new layout (../../ for repo-root resources,
sibling filenames between translations), update both switcher conventions,
the i18n-check mixed-layout support, the contributors-wall workflow globs,
TRANSLATIONS.md guidance, and drop now-dead root translation paths from the
fork-PR docs allowlist.
* fix(docs): correct root-relative links in Korean contribution guide
Prefix repo-root targets (scripts/sync-design-systems.ts, TRANSLATIONS.md,
package.json, .github/pull_request_template.md) with ../../ so they resolve
from the new docs/i18n/ depth; sibling translated docs stay bare.
Generated-By: looper 0.8.1 (runner=fixer, agent=claude-code)
---------
Co-authored-by: qiongyu1999 <2694684348@qq.com>
* docs: bring 0.9.0 / AMR README (13 langs) to main, R2-aware
Port the finalized 0.9.0 README set from the preview line onto main:
all 13 languages with the AMR announcement, product tour, 21-agent
grid, plugin usage/build/contribute, corrected counts (150/261/21),
Fellow callout, and the #3524 discussion link.
Follows main's R2 asset strategy (#3492): banner / banner-zh / star-us
/ github-metrics are referenced from repo-assets.open-design.ai, not
committed to the repo. coding-agents.png and the product screenshots
stay in-repo, matching how docs/screenshots/* is handled on main.
⚠️ Requires uploading banner-zh.png to R2 before/at merge (see PR body).
* docs: compress two product screenshots under the 1MB file-size guard
studio-image.png (2.5MB) and studio-hyperframe.png (1.1MB) tripped the
"Guard changed file sizes" CI (MAX_CHANGED_FILE_BYTES=1MB). Downscale to
1600px wide + palette PNG — now 0.47MB / 0.18MB, still crisp, kept
in-repo alongside the other product screenshots.
* docs: move coding-agents + product screenshots to R2
Follow the #3492 R2 asset strategy fully: the 10 large PNGs this PR was
keeping in-repo (docs/assets/coding-agents.png + docs/screenshots/product/*)
now reference repo-assets.open-design.ai/resources/images/ instead, and the
binaries are dropped from the tree.
Uploaded to R2 (200 verified):
- resources/images/coding-agents.png
- resources/images/product/{automation,design-system,home,integrations,
plugin,studio-hyperframe,studio-image,studio-ppt,studio-prototype}.png
Pre-existing main assets (docs/screenshots/skills/*, 01-entry-view,
07-magazine-deck) stay local, unchanged. banner-zh.png is now live on R2,
resolving the prior broken-banner blocker.
* docs: unify all language READMEs on the new 0.9.0 hero banner
The non-Chinese READMEs pointed at resources/images/banner.png, which was
still the old "Design with the agent" art — only README.zh-CN rendered the
new 0.9.0 hero. The new hero is language-neutral (English copy), so all 13
READMEs now reference a single canonical resources/images/hero.png instead
of the split banner.png / banner-zh.png pair.
Using a fresh object key sidesteps the stale Cloudflare/camo cache on the
old banner.png URL.
* docs: restore RTL wrapper on README.ar.md
The 0.9.0 localized rewrite dropped the <div dir="rtl"> wrapper that main's
README.ar.md uses to force right-to-left layout, so the Arabic landing page
would render mixed/LTR. Re-wrap the whole document in <div dir="rtl"> … </div>
to match main.
* docs: restore text language switcher and localize core-doc links (fix i18n P0)
The merge-queue Preflight job runs `pnpm i18n:check`, which is skipped for
docs-only PR-level CI — so this only surfaced once the PR entered the queue.
Two regressions from the 0.9.0 rewrite:
- Language switcher: all 13 READMEs replaced the single-line text switcher
with a multi-line image-badge block that i18n-check's parser can't read
(it scans one line and extracts <a href>text</a>, not <img alt>). Restore
the canonical text switcher, each README bolding its own language.
- Core-doc links: localized READMEs (de/fr/ja-JP/pt-BR/zh-CN, and zh-TW for
QUICKSTART) linked the English QUICKSTART.md/CONTRIBUTING.md while a
localized version exists. Point QUICKSTART at the localized file; label the
CONTRIBUTING translations-row original as [English](CONTRIBUTING.md).
`pnpm i18n:check` passes locally.
---------
Co-authored-by: qiongyu1999 <2694684348@qq.com>
Co-authored-by: lefarcen <935902669@qq.com>
The actual count of SKILL.md files in the skills/ directory is 139,
but README.md was showing 137 in multiple places. This updates all
occurrences to reflect the correct count.
Verified with: find skills -name 'SKILL.md' | wc -l