import * as React from 'react' import { createFileRoute } from '@tanstack/react-router' import { CursorFieldProvider } from '~/components/butterfly' import '~/styles.css' export const Route = createFileRoute('/')({ head: () => ({ meta: [ { title: 'Paseo – Manage coding agents from your phone and desktop' }, { name: 'description', content: 'A self-hosted daemon for Claude Code, Codex, and OpenCode. Agents run on your machine with your full dev environment. Connect from phone, desktop, or web.', }, ], }), component: Home, }) function Home() { return ( {/* Hero section with background image */}
{/* Mockup - inside hero so it's above the gradient, positioned to overflow into black section */}
Paseo app showing agent management interface
{/* Content section */}
) } function Nav() { return ( ) } function Hero() { return (

Run Codex and Claude Code locally from your phone and desktop

Bring your dev environment anywhere, with voice support built in.

) } function Differentiator({ title, description, }: { title: string description: string }) { return (

{title}

{description}

) } function Features() { return (
) } function Feature({ title, description, }: { title: string description: string }) { return (

{title}

{description}

) } function GetStarted() { return (
npm install -g @getpaseo/cli && paseo
Download for Mac Launch Web App
) } function AppleIcon(props: React.SVGProps) { return ( ) } function GlobeIcon(props: React.SVGProps) { return ( ) } function Step({ number, children, }: { number: number children: React.ReactNode }) { return (
{number}
{children}
) } function CodeBlock({ children }: { children: React.ReactNode }) { const [copied, setCopied] = React.useState(false) const text = typeof children === 'string' ? children : '' function handleCopy() { navigator.clipboard.writeText(text) setCopied(true) setTimeout(() => setCopied(false), 2000) } return (
$ {children}
) } function Story() { return (

Background

I started using Claude Code soon after it launched, often on my phone while going on walks to spend less time at my desk. I'd SSH into Tmux from my phone. It worked, but the UX was rough. Dictation was bad, the virtual keyboard was awkward, and the TUI would randomly start flickering, which forced me to start over very often.

I started building a simple app to manage agents via voice. I continued adding features as I needed them, and it slowly turned into what Paseo is today.

Anthropic and OpenAI added coding agents to their mobile apps since I started working on this, but they force you into cloud sandboxes where you lose your whole setup. I also like testing different agents, so locking myself to a single harness or model wasn't an option.

) } function FAQ() { return (

FAQ

Paseo is free and open source. It wraps CLI tools like Claude Code and Codex, which you'll need to have installed and configured with your own credentials. Voice is local-first by default and can optionally use OpenAI speech providers if you configure them. Paseo itself doesn't send your code anywhere. Agents run locally and communicate with their own APIs as they normally would. We provide an optional end-to-end encrypted relay for remote access, but you can also connect directly over your local network or use your own tunnel. Claude Code, Codex, and OpenCode. There isn't one. I won't pretend this can't be misused to squeeze every minute of your day into work. But for me it means less time at my desk, not more. I brainstorm whole features with voice. I kick off work at my desk, then check in from my phone during a walk. I see what an agent needs, send a voice reply, and put my phone away. Stroll, in Spanish. πŸšΆβ€β™‚οΈ
) } function FAQItem({ question, children, }: { question: string children: React.ReactNode }) { return (
+ - {question}
{children}
) }