/* Copyright 2026 Marimo. All rights reserved. */ import { BotIcon } from "lucide-react"; import React from "react"; import { AiProviderIcon } from "@/components/ai/ai-provider-icon"; import { useImperativeModal } from "@/components/modal/ImperativeModal"; import { Button, type ButtonProps } from "@/components/ui/button"; import { isWasm } from "@/core/wasm/utils"; import { cn } from "@/utils/cn"; import { PairWithAgentModal } from "./pair-with-agent-modal"; const FEATURED_AGENTS = [ { id: "claude", label: "Claude Code" }, { id: "codex", label: "Codex" }, { id: "cursor", label: "Cursor" }, { id: "gemini", label: "Gemini CLI" }, { id: "opencode", label: "OpenCode" }, { id: "github", label: "GitHub Copilot" }, { id: "openai-compatible", label: "Any local agent" }, ] as const satisfies ReadonlyArray<{ id: React.ComponentProps["provider"]; label: string; }>; export const usePairWithAgentModal = () => { const { openModal, closeModal } = useImperativeModal(); return React.useCallback( () => openModal(), [openModal, closeModal], ); }; export const PairWithAgentButton: React.FC< ButtonProps & { label?: string } > = ({ className, label = "Connect your agent", onClick, ...props }) => { const openPairWithAgentModal = usePairWithAgentModal(); if (isWasm()) { return null; } return ( ); }; export const PairWithAgentBanner: React.FC<{ label?: string; className?: string; }> = ({ label = "Connect your agent", className }) => { const openPairWithAgentModal = usePairWithAgentModal(); if (isWasm()) { return null; } return (
{label}
{FEATURED_AGENTS.map(({ id, label }) => (
{id === "openai-compatible" ? ( ) : ( )}
))}

Use your AI coding agent to pair-program on this notebook.

); };