diff --git a/desktop/public/harness-logos/CREDITS.md b/desktop/public/harness-logos/CREDITS.md
index f3a53a13b..654a6b742 100644
--- a/desktop/public/harness-logos/CREDITS.md
+++ b/desktop/public/harness-logos/CREDITS.md
@@ -11,6 +11,12 @@ license permits redistribution.
|---|---|---|---|---|---|
| `hermes.png` | [NousResearch/hermes-agent](https://github.com/NousResearch/hermes-agent) | `6ad632b` | MIT © 2025 Nous Research | `website/static/img/logo.png` | Cropped the baked-in border frame, padded to square, resized to 64×64, quantised to a 16-colour palette |
| `openclaw.svg` | [openclaw/openclaw](https://github.com/openclaw/openclaw) | `b06f40a` | MIT © 2026 OpenClaw Foundation | `ui/public/favicon.svg` | Removed the SMIL animation elements (renders the upstream rest pose statically — verified pixel-identical to the upstream frame at t=0); minified paths |
+| `omp.svg` | [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi) | `667111575ebba136dadfd6989379e7f67e0d40d9` | MIT © 2025 Mario Zechner; © 2025–2026 Can Bölük | `assets/icon.svg` | None |
+| `kimi.png` | [MoonshotAI/kimi-cli](https://github.com/MoonshotAI/kimi-cli) | `4a550effdfcb29a25a5d325bf935296cc50cd417` | Apache-2.0; NOTICE: Kimi Code CLI © 2025 Moonshot AI | `web/public/logo.png` | None |
+| `grok.svg` | [SpaceXAI brand guidelines](https://x.ai/legal/brand-guidelines) | Retrieved 2026-07-25 | xAI Brand Guidelines: marks may be used to accurately refer to xAI or its services; logos must be used exactly as provided | `SpaceXAI_Grok_Assets.zip` → `Grok_Logomark_Dark.svg` | None |
-`amp.png`, `cursor.png`, `grok.png`, `kimi.png`, `omp.png`, and `opencode.svg`
-predate this file; their provenance was not recorded when they were added.
+`amp.png` and `opencode.svg` predate this file; their provenance was not
+recorded when they were added. Cursor intentionally uses the generic terminal
+fallback: Cursor's official brand page offers downloadable assets, but neither
+that page nor its Terms of Service grants third parties permission to
+redistribute them. The previous unproven `cursor.png` was removed.
diff --git a/desktop/public/harness-logos/cursor.png b/desktop/public/harness-logos/cursor.png
deleted file mode 100644
index 9888d570c..000000000
Binary files a/desktop/public/harness-logos/cursor.png and /dev/null differ
diff --git a/desktop/public/harness-logos/grok.png b/desktop/public/harness-logos/grok.png
deleted file mode 100644
index 0e1ceee6a..000000000
Binary files a/desktop/public/harness-logos/grok.png and /dev/null differ
diff --git a/desktop/public/harness-logos/grok.svg b/desktop/public/harness-logos/grok.svg
new file mode 100644
index 000000000..642d7b6b0
--- /dev/null
+++ b/desktop/public/harness-logos/grok.svg
@@ -0,0 +1,4 @@
+
diff --git a/desktop/public/harness-logos/kimi.png b/desktop/public/harness-logos/kimi.png
index 8ca21cc77..033c0f4fb 100644
Binary files a/desktop/public/harness-logos/kimi.png and b/desktop/public/harness-logos/kimi.png differ
diff --git a/desktop/public/harness-logos/omp.png b/desktop/public/harness-logos/omp.png
deleted file mode 100644
index 2c9bf588a..000000000
Binary files a/desktop/public/harness-logos/omp.png and /dev/null differ
diff --git a/desktop/public/harness-logos/omp.svg b/desktop/public/harness-logos/omp.svg
new file mode 100644
index 000000000..f1ccf2a08
--- /dev/null
+++ b/desktop/public/harness-logos/omp.svg
@@ -0,0 +1,16 @@
+
diff --git a/desktop/src/features/onboarding/ui/RuntimeIcon.tsx b/desktop/src/features/onboarding/ui/RuntimeIcon.tsx
index 3cee0be9a..2debea409 100644
--- a/desktop/src/features/onboarding/ui/RuntimeIcon.tsx
+++ b/desktop/src/features/onboarding/ui/RuntimeIcon.tsx
@@ -19,9 +19,8 @@ const RUNTIME_LOGOS: Record = {
// Public-path logos for bundled presets. Served from /harness-logos/ at runtime.
// Keys match the preset `id` values emitted by the backend PRESET_HARNESSES.
export const PRESET_LOGOS: Record = {
- cursor: "/harness-logos/cursor.png",
- omp: "/harness-logos/omp.png",
- grok: "/harness-logos/grok.png",
+ omp: "/harness-logos/omp.svg",
+ grok: "/harness-logos/grok.svg",
opencode: "/harness-logos/opencode.svg",
kimi: "/harness-logos/kimi.png",
amp: "/harness-logos/amp.png",
@@ -55,8 +54,9 @@ export function RuntimeIcon({
const { isDark } = useTheme();
// Only use bundled logo maps — never render user-supplied avatar URLs for
// custom/preset entries (tracking pixel / spoofing vector, security line).
+ const id = runtime.id.trim().toLowerCase();
const imageUrl = getRuntimeLogoUrl(runtime);
- const shouldForceForegroundColor = !imageUrl && runtime.id === "goose";
+ const shouldForceForegroundColor = !imageUrl && id === "goose";
if (isBuzzRuntime(runtime)) {
return ;
@@ -69,6 +69,8 @@ export function RuntimeIcon({
className={cn(
"rounded-md object-contain",
className,
+ id === "omp" && "bg-[#0d0d0d] p-1",
+ id === "grok" && "bg-white p-1",
shouldForceForegroundColor &&
(isDark ? "brightness-0 invert" : "brightness-0"),
)}
diff --git a/desktop/src/features/onboarding/ui/presetLogos.test.mjs b/desktop/src/features/onboarding/ui/presetLogos.test.mjs
index 81b22ec8b..6f477fff6 100644
--- a/desktop/src/features/onboarding/ui/presetLogos.test.mjs
+++ b/desktop/src/features/onboarding/ui/presetLogos.test.mjs
@@ -46,9 +46,24 @@ test("PRESET_HARNESSES parse found the preset ids", () => {
);
});
+const FALLBACK_ONLY_PRESETS = new Set([
+ // Cursor publishes official assets, but neither its brand page nor terms grant
+ // third parties permission to redistribute them. Keep the generic icon.
+ "cursor",
+]);
+
for (const id of presetIds) {
- test(`preset "${id}" has a bundled logo`, () => {
+ test(`preset "${id}" has a bundled logo or an approved fallback`, () => {
const logoPath = PRESET_LOGOS[id];
+ if (FALLBACK_ONLY_PRESETS.has(id)) {
+ assert.equal(
+ logoPath,
+ undefined,
+ `preset "${id}" must keep the generic TerminalSquare fallback until ` +
+ "its vendor grants logo redistribution permission",
+ );
+ return;
+ }
assert.ok(
logoPath,
`preset "${id}" has no PRESET_LOGOS entry — it renders the generic ` +