'use client' import { useState, useEffect, useRef } from 'react' import { Eye } from 'lucide-react' const slides = [ { label: 'Dashboard', src: '/dashboard.png', alt: 'GreyProxy dashboard overview showing connection stats and activity', }, { label: 'Pending requests', src: '/pending_requests.png', alt: 'GreyProxy pending network requests with Allow and Deny controls', }, { label: 'Rules', src: '/rules.png', alt: 'GreyProxy domain rules configuration for allow and deny policies', }, { label: 'Logs', src: '/logs.png', alt: 'GreyProxy connection logs showing all outbound network activity', }, ] const INTERVAL = 4000 export function Observability() { const [active, setActive] = useState(0) const [paused, setPaused] = useState(false) const timerRef = useRef | null>(null) // Key to force re-mount of the progress bar so animation restarts const [tick, setTick] = useState(0) function goTo(i: number) { setActive(i) setTick((t) => t + 1) resetTimer() } function advance() { setActive((i) => (i + 1) % slides.length) setTick((t) => t + 1) } function resetTimer() { if (timerRef.current) clearInterval(timerRef.current) if (!paused) { timerRef.current = setInterval(advance, INTERVAL) } } useEffect(() => { if (paused) { if (timerRef.current) clearInterval(timerRef.current) return } timerRef.current = setInterval(advance, INTERVAL) return () => { if (timerRef.current) clearInterval(timerRef.current) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [paused]) return (
Clarity

See every network connection.

You can't predict which domains your agent will reach for. GreyProxy captures every outbound connection and lets you allow or deny them in real time, without restarting the session.

setPaused(true)} onMouseLeave={() => setPaused(false)} > {/* Screenshot with crossfade */}
{slides.map((slide, i) => ( {slide.alt} ))}
{/* Progress indicators + labels */}
{slides.map((slide, i) => ( ))}

Every outbound request is visible. Allow trusted domains, block unknown ones, and adjust policies live as your agent works.

) }