'use client'; import { useState, useEffect } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { ArrowRight, Terminal, Check } from 'lucide-react'; const CTA_TITLES = [ 'Run coding agents in sandboxes. Control them over HTTP.', 'A server inside your sandbox. An API for your app.', 'Claude Code, Codex, OpenCode, Amp — one HTTP API.', 'Your app connects remotely. The coding agent runs isolated.', 'Streaming events. Handling permissions. Managing sessions.', 'Install with curl. Connect over HTTP. Control any coding agent.', 'The bridge between your app and sandboxed coding agents.', ]; function AnimatedCTATitle() { const [currentIndex, setCurrentIndex] = useState(0); useEffect(() => { const interval = setInterval(() => { setCurrentIndex(prev => (prev + 1) % CTA_TITLES.length); }, 3000); return () => clearInterval(interval); }, []); return (

{CTA_TITLES[currentIndex]}

); } const CopyInstallButton = () => { const [copied, setCopied] = useState(false); const installCommand = 'curl -sSL https://sandboxagent.dev/install | sh'; const handleCopy = async () => { try { await navigator.clipboard.writeText(installCommand); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { console.error('Failed to copy:', err); } }; return ( ); }; export function CTASection() { return (
A server that runs inside isolated environments.
Your app connects remotely to control any coding agent.
Read the Docs
); }