Skip to content

Commit 219af5d

Browse files
authored
feat(shared): add fx by Vercel as a built-in terminal agent (#6768)
* feat(shared): add fx by Vercel as a built-in terminal agent Adds Vercel's fx to BUILTIN_TERMINAL_AGENTS, with light/dark preset icons, README row, docs bullet, and marketing demo entry. Prompt launches run fx ask --auto and continue the saved session via fx resume last; resume is fx resume <id>. Verified end-to-end against an installed fx 0.0.5. Claude-Session: https://claude.ai/code/session_01DuAhw6Ao5Cru3acdkrzx9f * feat(desktop): expose fx in the icon picker, settings search, and preset docs Claude-Session: https://claude.ai/code/session_01DuAhw6Ao5Cru3acdkrzx9f
1 parent 10527b6 commit 219af5d

12 files changed

Lines changed: 62 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ Superset works with any CLI-based coding agent, including:
193193
| <picture><source media="(prefers-color-scheme: dark)" srcset="packages/ui/src/assets/icons/preset-icons/codex-white.svg" /><img height="16" align="top" alt="OpenAI Codex CLI" src="packages/ui/src/assets/icons/preset-icons/codex.svg" /></picture> &nbsp;[OpenAI Codex CLI](https://github.com/openai/codex) | Fully supported |
194194
| <img height="16" align="top" alt="Cursor Agent" src="packages/ui/src/assets/icons/preset-icons/cursor.svg" /> &nbsp;[Cursor Agent](https://docs.cursor.com/agent) | Fully supported |
195195
| <picture><source media="(prefers-color-scheme: dark)" srcset="packages/ui/src/assets/icons/preset-icons/droid-white.svg" /><img height="16" align="top" alt="Droid" src="packages/ui/src/assets/icons/preset-icons/droid.svg" /></picture> &nbsp;[Droid](https://www.factory.ai/) | Fully supported |
196+
| <picture><source media="(prefers-color-scheme: dark)" srcset="packages/ui/src/assets/icons/preset-icons/fx-white.svg" /><img height="16" align="top" alt="fx" src="packages/ui/src/assets/icons/preset-icons/fx.svg" /></picture> &nbsp;[fx](https://fx.sh/) | Fully supported |
196197
| <img height="16" align="top" alt="Gemini CLI" src="packages/ui/src/assets/icons/preset-icons/gemini.svg" /> &nbsp;[Gemini CLI](https://github.com/google-gemini/gemini-cli) | Fully supported |
197198
| <picture><source media="(prefers-color-scheme: dark)" srcset="packages/ui/src/assets/icons/preset-icons/copilot-white.svg" /><img height="16" align="top" alt="GitHub Copilot" src="packages/ui/src/assets/icons/preset-icons/copilot.svg" /></picture> &nbsp;[GitHub Copilot](https://github.com/features/copilot) | Fully supported |
198199
| <picture><source media="(prefers-color-scheme: dark)" srcset="packages/ui/src/assets/icons/preset-icons/grok-white.svg" /><img height="16" align="top" alt="Grok" src="packages/ui/src/assets/icons/preset-icons/grok.svg" /></picture> &nbsp;[Grok](https://x.ai/) | Fully supported |

apps/desktop/src/renderer/routes/_authenticated/settings/agents/components/V2AgentsSettings/components/AgentIconPicker/agent-icon-options.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export const AGENT_ICON_OPTIONS: readonly AgentIconOption[] = [
2222
{ id: "vibe", label: "Mistral Vibe" },
2323
{ id: "kimi", label: "Kimi Code" },
2424
{ id: "grok", label: "Grok" },
25+
{ id: "fx", label: "fx" },
2526
{ id: "agy", label: "Antigravity" },
2627
{ id: "kiro", label: "Kiro" },
2728
];

apps/desktop/src/renderer/routes/_authenticated/settings/utils/settings-search/settings-search.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -867,6 +867,8 @@ export const SETTINGS_ITEMS: SettingsItem[] = [
867867
"moonshot",
868868
"grok",
869869
"xai",
870+
"fx",
871+
"vercel",
870872
"antigravity",
871873
"agy",
872874
"google",
@@ -933,6 +935,8 @@ export const SETTINGS_ITEMS: SettingsItem[] = [
933935
"moonshot",
934936
"grok",
935937
"xai",
938+
"fx",
939+
"vercel",
936940
"antigravity",
937941
"agy",
938942
"google",

apps/docs/content/docs/agent-integration.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Run AI coding agents in isolated workspaces. Each agent works independently with
2525
- **Cursor Agent** - Cursor AI agent
2626
- **Droid** - Factory's autonomous coding agent
2727
- **Polygraph** - Meta-harness with cross-repo visibility and persistent memory
28+
- **fx** - Vercel's terminal coding agent
2829
- **Antigravity** - Google's Antigravity CLI (`agy`)
2930
- **Kiro** - AWS's spec-driven CLI coding agent
3031

apps/docs/content/docs/terminal-presets.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Pre-configured presets for popular AI agents. Defaults mirror the bundled Supers
5555
- **vibe** - `vibe --trust --auto-approve` (Mistral's coding agent; trust grants access to `AGENTS.md` and `.agents/skills/`)
5656
- **kimi** - `kimi` (Kimi Code CLI; prompt launches run with `kimi -p` and resume in the interactive TUI)
5757
- **grok** - `grok --always-approve` (xAI's Grok Build CLI; prompts seed the interactive session directly)
58+
- **fx** - `fx` (Vercel's coding agent; prompt launches run `fx ask --auto` and resume the session in the TUI)
5859
- **agy** - `agy --mode accept-edits` (Google's Antigravity CLI; prompt launches seed the interactive session with `-i`)
5960
- **kiro** - `kiro-cli chat --trust-all-tools` (AWS's Kiro CLI; prompts seed the interactive session directly)
6061

Lines changed: 3 additions & 0 deletions
Loading

apps/marketing/src/app/components/FeaturesSection/components/UniversalCompatibilityDemo/UniversalCompatibilityDemo.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const AGENTS = [
1515
{ name: "Mistral Vibe", icon: "/app-icons/vibe.svg", size: 18 },
1616
{ name: "Kimi Code", icon: "/app-icons/kimi.svg", size: 18 },
1717
{ name: "Grok CLI", icon: "/app-icons/grok.svg", size: 18 },
18+
{ name: "fx", icon: "/app-icons/fx.svg", size: 18 },
1819
{ name: "Antigravity", icon: "/app-icons/agy.svg", size: 18 },
1920
{ name: "Kiro", icon: "/app-icons/kiro.svg", size: 18 },
2021
];

packages/shared/src/agent-command.test.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,34 @@ describe("agy agent registration", () => {
153153
});
154154
});
155155

156+
describe("fx agent registration", () => {
157+
it("is a registered terminal agent with the right label", () => {
158+
expect(AGENT_TYPES).toContain("fx");
159+
expect(AGENT_LABELS.fx).toBe("fx");
160+
});
161+
162+
it("runs prompt launches through fx ask and resumes them interactively", () => {
163+
const command = buildAgentPromptCommand({
164+
prompt: "hello",
165+
randomId: "fx-1234",
166+
agent: "fx",
167+
});
168+
169+
expect(command).toStartWith(
170+
"fx ask --auto \"$(cat <<'SUPERSET_PROMPT_fx1234'",
171+
);
172+
expect(command).toEndWith('\n)" ; fx resume last');
173+
});
174+
175+
it("derives host preset prompt and resume args from the base command", () => {
176+
const preset = getPresetById("fx");
177+
expect(preset?.command).toBe("fx");
178+
expect(preset?.args).toEqual([]);
179+
expect(preset?.promptArgs).toEqual(["ask", "--auto"]);
180+
expect(preset?.resumeArgs).toEqual(["resume"]);
181+
});
182+
});
183+
156184
describe("grok agent registration", () => {
157185
it("is a registered terminal agent with the right label", () => {
158186
expect(AGENT_TYPES).toContain("grok");

packages/shared/src/builtin-terminal-agents.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,17 @@ export const BUILTIN_TERMINAL_AGENTS = [
220220
resumeCommand: "agy --mode accept-edits --conversation",
221221
nonInteractiveCommand: "agy -p",
222222
}),
223+
createBuiltinTerminalAgent({
224+
id: "fx",
225+
label: "fx",
226+
description:
227+
"Vercel's coding agent for reading, editing, and running code from the terminal.",
228+
command: "fx",
229+
promptCommand: "fx ask --auto",
230+
promptCommandSuffix: "; fx resume last",
231+
resumeCommand: "fx resume",
232+
nonInteractiveCommand: "fx ask --auto",
233+
}),
223234
] as const;
224235

225236
export type BuiltinTerminalAgentType =
Lines changed: 3 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)