'use client'; import { motion } from 'framer-motion'; const frictions = [ { number: '01', title: 'Fragmented Agent Scaffolds', description: 'Claude Code, Codex, OpenCode, and Amp each have proprietary APIs. Swapping agents means rewriting your entire integration.', solution: 'Unified control plane for all agent engines.', visual: (
Claude Bridge
Amp Bridge
API
01{' '} agent . spawn ( "claude-code" )
02{' '} agent . spawn ( "amp" )
// Exactly same methods
), accentColor: 'orange', }, { number: '02', title: 'Deploy Anywhere', description: "Whether you're running locally, in Docker, or with E2B, Daytona, and Vercel — you shouldn't need different integration code for each.", solution: 'One SDK, any environment. Deploy locally or to any cloud provider with a single config change.', visual: (
E2B
+
Daytona
+
Vercel
# Works with all providers
SANDBOX_PROVIDER = "daytona"
), accentColor: 'purple', }, { number: '03', title: 'Transient State', description: 'Transcripts and session data are usually lost when the agent process ends. Debugging and replay become impossible.', solution: 'Standardized session JSON. Stream events to your own storage in real-time.', visual: (
# Session persisted automatically
"events" : [
{'{ '} "type" : "tool_call" {' }'}
{'{ '} "type" : "message" {' }'}
]
Streaming to Rivet Actors
), accentColor: 'blue', }, ]; const accentStyles = { orange: { gradient: 'from-orange-500/20', border: 'border-orange-500/30', glow: 'rgba(255,79,0,0.15)', number: 'text-orange-500', }, purple: { gradient: 'from-purple-500/20', border: 'border-purple-500/30', glow: 'rgba(168,85,247,0.15)', number: 'text-purple-500', }, blue: { gradient: 'from-blue-500/20', border: 'border-blue-500/30', glow: 'rgba(59,130,246,0.15)', number: 'text-blue-500', }, }; export function PainPoints() { return (

Integrating coding agents is hard.

Every agent has its own API, event format, and session model. Swapping agents means rewriting your entire integration.

{frictions.map((friction, index) => { const styles = accentStyles[friction.accentColor as keyof typeof accentStyles]; return ( {/* Top shine */}
{/* Hover glow */}
{/* Corner highlight */}
{/* Title */}

{friction.title}

{/* Description */}

{friction.description}

{/* Solution */}

{friction.solution}

{/* Visual */} {friction.visual}
); })}
); }