---
title: "Deploy Paseo Daemon"
description: "Paseo Daemon [Nov '26] (Claude Code/Codex/OpenCode/Pi Agents) Self Host"
category: "AI/ML"
url: https://railway.com/deploy/paseo-daemon
---

# Deploy Paseo Daemon

Paseo Daemon [Nov '26] (Claude Code/Codex/OpenCode/Pi Agents) Self Host

**[Deploy Paseo Daemon on Railway](https://railway.com/template/paseo-daemon)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/paseo-daemon/manifest.json

- **Creator:** Medim's Projects
- **Category:** AI/ML
- **Total deploys:** 1

## Template content

### Paseo https://paseo.sh/logo.svg

- **Image:** ghcr.io/getpaseo/paseo:latest
- **Start command:** `bash -c 'export PATH="$HOME/.local/bin:$PATH"; as(){ if [ "$(id -u)" = 0 ]; then gosu paseo "$@"; else "$@"; fi; }; gitid(){ as gh auth setup-git; if [ -z "$(as git config --global user.email)" ]; then l=$(as gh api user --jq .login); i=$(as gh api user --jq .id); as git config --global user.name "$l"; as git config --global user.email "$i+$l@users.noreply.github.com"; echo "[setup] git identity set to $l"; fi; }; if [ "$(id -u)" = 0 ]; then mkdir -p "$HOME/workspace" "$HOME/.local/bin"; if ! command -v gh >/dev/null; then a=$(dpkg --print-architecture); u=$(curl -fsSLI -o /dev/null -w %{url_effective} https://github.com/cli/cli/releases/latest); v=${u##*/v}; curl -fsSL "https://github.com/cli/cli/releases/download/v$v/gh_${v}_linux_$a.tar.gz" | tar xz -C /tmp && cp "/tmp/gh_${v}_linux_$a/bin/gh" "$HOME/.local/bin/gh" && echo "[setup] installed gh $v" || echo "[setup] gh install failed"; fi; find "$HOME" -maxdepth 3 -xdev -user 0 -exec chown paseo:paseo {} +; if [ ! -L /workspace ]; then rm -rf /workspace && ln -s "$HOME/workspace" /workspace; fi; fi; cd "$HOME"; command -v claude >/dev/null || as bash -c "curl -fsSL https://claude.ai/install.sh | bash"; if as gh auth status >/dev/null 2>&1; then gitid; else ( until echo "[setup] GitHub not connected: open https://github.com/login/device and enter the code below"; echo | as gh auth login --web -h github.com -p https 2>&1; do sleep 5; done; echo "[setup] GitHub connected"; gitid ) & fi; exec /usr/bin/tini -- /usr/local/bin/paseo-docker-entrypoint'`
- **Health check:** /api/health
- **Public domain:** Yes

## Documentation

# Deploy and Host Paseo Daemon on Railway (remote coding agents, self hosted)

Run the Paseo daemon on Railway and move your coding agents off your laptop. Claude Code, Codex, OpenCode and Pi run in the cloud around the clock, and you manage them from the Paseo desktop app, the mobile app, the CLI or the bundled web UI. Close your laptop, and the agents keep working.

> **Required first step:** after the first deploy, open the service's deploy logs, copy the GitHub login code, and authorize it at [github.com/login/device](https://github.com/login/device). The daemon cannot clone your repos until you do. No coding agents are bundled either, so install yours from a Paseo terminal (see [Installing coding agents](#installing-coding-agents)).

## About Hosting Paseo Daemon (Paseo Docker, headless server)

Paseo is a free, open-source agentic development environment. The desktop app bundles its own daemon, which means agents normally run on your own machine and use its CPU, RAM, battery and network. If the machine sleeps, the agents stop.

This template runs the daemon headless from the official `ghcr.io/getpaseo/paseo` image. The daemon serves its API, WebSocket and web UI on one HTTPS domain. Your devices become thin clients, and the workloads run on Railway.

- **Paseo daemon**: runs agents, worktrees, terminals and sessions, and serves the web UI on port `6767`
- **Volume**: persists daemon state, agent logins (`.claude`, `.codex`) and your workspace across redeploys
- **HTTPS domain**: Railway terminates TLS and proxies WebSockets to the daemon
- **Password auth**: `PASEO_PASSWORD` is generated at deploy time and protects the API and WebSocket

## Why Deploy Paseo Daemon on Railway

Coding agents are long-running, bursty workloads. Running them on Railway keeps your local machine free and lets agents work while you are offline.

| | Local daemon (desktop app) | VPS | Railway |
|---|---|---|---|
| Runs when laptop is closed | No | Yes | Yes |
| HTTPS + WebSockets | Manual (tunnel) | Manual (Caddy/Nginx) | Built in |
| Setup time | Minutes | Hours | One click |
| Billing | Your hardware | Fixed monthly | Usage-based |

## Common Use Cases for Paseo Daemon

- Run Claude Code or Codex sessions for hours without keeping your laptop awake
- Start a task from your phone and review the diff when you are back at a desk
- Run several agents in parallel, each in its own git worktree, without slowing your machine
- Keep a persistent cloud dev box that every device connects to
- Share one agent host between your desktop, laptop and mobile
- Drive agents from scripts or CI with the Paseo CLI and `--host`

## Dependencies for Paseo Daemon Hosting

The template needs one service running the Paseo daemon image, a persistent volume for state and agent logins, and a public HTTPS domain. Railway provisions all three, so the only thing you bring is your own agent provider credentials.

### Deployment Dependencies

- Paseo Docker image: `ghcr.io/getpaseo/paseo`
- A Railway volume mounted at `/home/paseo`
- A GitHub account, authorized once through the login link in the first deploy logs
- Your own credentials for each agent provider (API key or subscription login)
- A Paseo client: desktop app, mobile app, CLI, or the bundled web UI

No coding agents are bundled. You install the ones you use from a Paseo terminal after deploying (see below).

### Implementation Details (environment variables)

| Variable | Purpose |
|---|---|
| `PASEO_PASSWORD` | Required password for API and WebSocket access. Generated on deploy |
| `PASEO_HOSTNAMES` | Allowed host names. Set to the Railway public domain |
| `PASEO_LISTEN` | Listen address, `0.0.0.0:6767` |
| `PASEO_WEB_UI_ENABLED` | Serves the bundled web UI, `true` |
| `PASEO_HOME` | Daemon state directory, `/home/paseo/.paseo` |
| `ANTHROPIC_API_KEY` | Optional. Passed to Claude Code |
| `OPENAI_API_KEY` | Optional. Passed to Codex |

Provider variables are forwarded to every agent the daemon launches. Leave them empty if you prefer to log in with a subscription instead.

## Local daemon vs Railway daemon: what changes

With the desktop app, the daemon and the agents share your machine. With this template, the daemon runs on Railway and your desktop app connects to it as a remote host. Paseo works the same way in both setups. The only difference is where the agents run: Railway's CPU and RAM do the work, and your laptop only renders the UI.

## How to use Paseo after deploying

1. **Log in to GitHub.** On the first deploy, open the service's deploy logs and find the GitHub login URL and code. Open the URL, enter the code and authorize. This lets the daemon clone and push to your repos, and the login is saved on the volume.
2. Open the Railway domain in your browser to load the bundled web UI.
3. Add a direct connection using the domain and the `PASEO_PASSWORD` value from the service variables.
4. In the Paseo desktop or mobile app, add the same domain as a new host with the same password.
5. Open a Paseo terminal and install your coding agents (next section).
6. Clone a repository into the workspace and start your first agent session.

## Installing coding agents

The image ships without agent CLIs, so you choose which ones to install. Open a terminal in Paseo and run the commands for the agents you use. Installing under `~/.local` keeps them on the volume, so they survive redeploys.

```bash
# Once: install global npm packages on the volume
npm config set prefix ~/.local
export PATH="$HOME/.local/bin:$PATH"

# Claude Code
curl -fsSL https://claude.ai/install.sh | bash

# Codex
npm install -g @openai/codex

# OpenCode
npm install -g opencode-ai

# Pi
npm install -g --ignore-scripts @earendil-works/pi-coding-agent

# GitHub Copilot CLI
npm install -g @github/copilot
```

Run each agent once (`claude`, `codex`, `opencode`, `pi`, `copilot`) and follow its login prompt, or set provider API keys as service variables instead. Logins are stored on the volume.

## Is Paseo free? (Paseo license and pricing)

Yes. Paseo is open source under the Apache 2.0 license, and the daemon, desktop app, mobile app and CLI are free. You pay only for hosting and for your agent providers (Anthropic, OpenAI and others), billed separately by them.

### Monthly cost of self hosting Paseo Daemon on Railway

Railway bills by usage. An idle daemon uses very little, and cost grows with the number of agents running in parallel and how long they run. A single developer running a few sessions a day typically spends around $5 per month. Heavy parallel workloads need more RAM, which you can scale up in the service settings.

## Troubleshooting Paseo Daemon on Railway

**Web UI loads but will not connect.** The static UI is public, but the API needs the password. Add a direct connection using the `PASEO_PASSWORD` value.

**403 Host not allowed.** The domain is missing from `PASEO_HOSTNAMES`. Set it to your Railway domain, or to your custom domain if you added one, and redeploy.

**Provider not available.** The agent CLI is not installed or not on `PATH`. Install it from a Paseo terminal (see Installing coding agents) and check that `~/.local/bin` is on `PATH`.

**Cannot clone a private repo.** The GitHub login was not completed. Find the login URL in the first deploy logs and authorize it, then try again.

**Agent asks to log in again after a redeploy.** The volume is not mounted at `/home/paseo`. Agent logins live in `.claude` and `.codex` under that path.

**Permission errors in the workspace.** The daemon runs as the non-root `paseo` user (uid 1000). Make sure files on the volume belong to that user.

**Agents get killed during long tasks.** The service is running out of memory. Raise the RAM limit or run fewer agents in parallel.

**Logs.** Check the Railway deploy logs, or `/home/paseo/.paseo/daemon.log` on the volume.

## Frequently Asked Questions (FAQs)

**Do my agents keep running when I close the app?**
Yes. The agents run on Railway, not on your device, so closing the desktop or mobile app does not stop them.

**Which agents does Paseo support?**
Claude Code, Codex, OpenCode, Copilot and Pi. Each one uses your own credentials.

**Are coding agents included?**
No. Install the ones you use from a Paseo terminal with the commands above. They stay installed across redeploys.

**Can I use my Claude or ChatGPT subscription instead of an API key?**
Yes. Log in once from a terminal inside Paseo, and the login is saved on the volume.

**Is the daemon exposed to the internet?**
Only through the HTTPS domain, and every API and WebSocket request requires `PASEO_PASSWORD`. Use a long, random password and do not share it.

**Can I still use the Paseo desktop app?**
Yes. Add the Railway domain as a remote host. You can keep your local daemon too and switch between hosts.

**Will my code and sessions survive a redeploy?**
Yes. Daemon state, agent logins and the workspace live on the volume.

**How do I update Paseo?**
Redeploy the service. The image tracks the latest stable Paseo release.

## Related templates

- [n8n with workers and task runners](https://railway.com/deploy/n8n-w-workers-task-runner?referralCode=4ArgSI): production n8n 2.0 in queue mode, with Python and JavaScript task runners.
- [n8n with FFmpeg](https://railway.com/deploy/n8n-w-ffmpeg?referralCode=4ArgSI): n8n with FFmpeg for video and audio automation.
- [Directus](https://railway.com/deploy/2fy758?referralCode=4ArgSI): headless CMS and instant REST/GraphQL APIs for any SQL database.

*[Updated Nov '26]*

## Similar templates

- [Chat Chat](https://railway.com/deploy/-WWW5r) — Chat Chat, your own unified chat and search to AI platform.
- [Weaviate](https://railway.com/deploy/weaviate-1) — Vector database with hybrid search and an API key-protected API
- [Möbius v0.1 Personal AI OS](https://railway.com/deploy/mobius-v01-personal-ai-os) — Self-hosted AI agent that builds and runs apps for you, with memory.

Open this page in a browser: https://railway.com/deploy/paseo-daemon
