diff --git a/.changeset/fn-7818-cursor-logo.md b/.changeset/fn-7818-cursor-logo.md
new file mode 100644
index 0000000000..34064c73e1
--- /dev/null
+++ b/.changeset/fn-7818-cursor-logo.md
@@ -0,0 +1,7 @@
+---
+"@runfusion/fusion": patch
+---
+
+summary: Use the real Cursor logo in the usage dropdown, model selection, and other provider surfaces.
+category: fix
+dev: Replaces the placeholder CursorCliIcon SVG with the Cursor brand mark and adds a `cursor` → `cursor-cli` mapping in inferProviderIconKey.
diff --git a/packages/dashboard/app/components/ProviderIcon.tsx b/packages/dashboard/app/components/ProviderIcon.tsx
index 8c3ab8c7c1..c0cf113ffd 100644
--- a/packages/dashboard/app/components/ProviderIcon.tsx
+++ b/packages/dashboard/app/components/ProviderIcon.tsx
@@ -682,6 +682,10 @@ function DroidCliIcon({ size, color, label = "Factory AI — via Droid CLI" }: {
);
}
+/*
+FNXC:ProviderIcons 2026-07-11-00:00:
+FN-7818 replaced the hand-drawn Cursor placeholder with Cursor's official cube/arrow brand mark from cursor.com. This shared icon component is the single source for the Usage dropdown, model-selection surfaces, provider auth cards, and onboarding.
+*/
function CursorCliIcon({ size, color, label = "Cursor — via Cursor CLI" }: { size: number; color: string; label?: string }) {
return (
);
}
diff --git a/packages/dashboard/app/components/__tests__/ProviderIcon.test.tsx b/packages/dashboard/app/components/__tests__/ProviderIcon.test.tsx
index 08a9567e00..0eb638c3b6 100644
--- a/packages/dashboard/app/components/__tests__/ProviderIcon.test.tsx
+++ b/packages/dashboard/app/components/__tests__/ProviderIcon.test.tsx
@@ -58,16 +58,22 @@ describe("ProviderIcon", () => {
expect(svg.parentElement).toHaveStyle({ color: "var(--provider-openai)" });
});
- it("renders cursor-cli icon with provider token color", () => {
+ it("renders cursor-cli icon with provider token color and official brand mark", () => {
render();
const svg = screen.getByTestId("cursor-cli-icon");
expect(svg).toBeInTheDocument();
expect(screen.getByLabelText("Cursor — via Cursor CLI")).toBeInTheDocument();
- const badgeGlyph = svg.querySelector('path[stroke="var(--provider-icon-contrast)"]');
- expect(badgeGlyph).toBeInTheDocument();
+ expect(svg.querySelector('path[data-cursor-brand-mark="cube"]')).toHaveAttribute("fill", "var(--provider-cursor-cli)");
+ expect(svg.querySelector('path[data-cursor-brand-mark="arrow"]')).toHaveAttribute("fill", "var(--provider-icon-contrast)");
expect(svg.parentElement).toHaveStyle({ color: "var(--provider-cursor-cli)" });
});
+ it("infers cursor provider strings to the cursor-cli brand icon", () => {
+ render();
+ expect(screen.getByTestId("cursor-cli-icon")).toBeInTheDocument();
+ expect(document.querySelector('[data-provider="cursor"] svg:not([data-testid])')).not.toBeInTheDocument();
+ });
+
it("renders grok-cli icon reusing the xAI brand mark", () => {
render();
const svg = screen.getByTestId("xai-icon");
diff --git a/packages/dashboard/app/utils/__tests__/providerIconKey.test.ts b/packages/dashboard/app/utils/__tests__/providerIconKey.test.ts
index b28691d98f..8b54994fe0 100644
--- a/packages/dashboard/app/utils/__tests__/providerIconKey.test.ts
+++ b/packages/dashboard/app/utils/__tests__/providerIconKey.test.ts
@@ -9,6 +9,10 @@ describe("inferProviderIconKey", () => {
["openai-codex", "openai"],
["gemini-2.5-pro", "google"],
["google-antigravity", "google"],
+ ["cursor", "cursor-cli"],
+ ["Cursor", "cursor-cli"],
+ ["cursor-agent", "cursor-cli"],
+ ["cursor/gpt-5", "cursor-cli"],
["ollama/llama3", "ollama"],
["minimax-text-01", "minimax"],
["zhipu-glm-4", "zai"],
diff --git a/packages/dashboard/app/utils/providerIconKey.ts b/packages/dashboard/app/utils/providerIconKey.ts
index a1b85c46d2..467e9ce23f 100644
--- a/packages/dashboard/app/utils/providerIconKey.ts
+++ b/packages/dashboard/app/utils/providerIconKey.ts
@@ -11,6 +11,14 @@ export function inferProviderIconKey(modelOrProviderName: string): string {
const normalized = modelOrProviderName.toLowerCase();
// Map common provider/model names to their icon keys.
+ /*
+ FNXC:ProviderIcons 2026-07-11-00:00:
+ FN-7818: model-id-shaped Cursor provider strings (cursor, cursor-agent, cursor/) must resolve to the cursor-cli brand icon on model-selection surfaces instead of the generic CPU fallback, mirroring UsageIndicator's local mapping.
+ Run before broad model-family checks so cursor/gpt-5 stays Cursor-branded instead of OpenAI-branded.
+ */
+ if (normalized.includes("cursor")) {
+ return "cursor-cli";
+ }
if (normalized.includes("claude") || normalized.includes("anthropic")) {
return "anthropic";
}