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 – Run coding agents on your machines, from desktop and phone' }, { 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 */}
{/* Content section with black background */}
) } function Nav() { return ( ) } function Hero() { return (

Manage coding agents from your phone and desktop

Agents run on your machine with your full dev environment. Connect from phone, desktop, or web.

) } 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 (

Install and run the daemon

npm install -g @getpaseo/cli && paseo

Open the app and connect to your daemon

Start managing your agents from anywhere

Free and open source. Works on iOS, Android, web, and desktop.

) } 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 slowly ended up building 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 features currently require an OpenAI API key, but local voice is coming soon. 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. 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}
) }