type Agent = { name: string; /** asset file stem; if no theme variants, `variants: false` */ file: string; variants: boolean; }; const agents: Agent[] = [ { name: 'Claude', file: 'claude', variants: false }, { name: 'Codex', file: 'codex', variants: true }, { name: 'Cursor', file: 'cursor', variants: true }, { name: 'Gemini CLI', file: 'gemini', variants: false }, { name: 'OpenCode', file: 'opencode', variants: true }, { name: 'Windsurf', file: 'windsurf', variants: true }, { name: 'Zed', file: 'zed', variants: true }, ]; export function Agents() { // double the list so the marquee loops seamlessly const track = [...agents, ...agents]; return (

Bring your own agent. Anything that edits React works.

{track.map((agent, i) => ( {agent.name} ))}
); } function AgentLogo({ agent }: { agent: Agent }) { const alt = agent.name; const cls = 'h-[28px] md:h-[34px] lg:h-[40px] w-auto object-contain shrink-0'; if (!agent.variants) { return {alt}; } return ( <> {alt} ); }