Deploy Inyon
Steer Claude Code, Codex and Gemini CLI agents in tmux from your phone
Just deployed
Deploy and Host Inyon on Railway
Inyon lets you watch, answer and steer the coding agents running in tmux on your machines, from your phone or any browser. It reads Claude Code, Codex, Gemini CLI, OpenCode, GitHub Copilot and Antigravity CLI sessions as chats, puts their permission prompts on buttons, and types your replies back into the real terminal.
About Hosting Inyon
Inyon needs a hub: one always-on process that serves the web app, keeps your machines connected and sends notifications. This template runs that hub on Railway, so you get it at a public HTTPS address with nothing to install at home.
The hub is also a machine in its own right. Its container has tmux, git and ssh, and a persistent home folder, so you can install Claude Code or Codex on it from the browser and run agents in the cloud. Laptops and servers join it by running one command; they connect out to the hub, so nothing on them needs an open port.
Common Use Cases
- Answer an agent's permission prompt or question from your phone while you are away from your desk
- See every agent session across a laptop, a home server and a VPS in one overview
- Keep a cloud dev box on Railway with Claude Code or Codex running in tmux, reachable from any browser
- Get notified when an agent finishes or needs you, then read its diff and send the next instruction
Dependencies for Inyon Hosting
- A Railway volume for the hub's records and the home folder
- Nothing else: no database, no external services
Deployment Dependencies
- Inyon source and docs: https://github.com/Abhash-Chakraborty/inyon and https://inyon.tech/docs/
- Container image for this template: https://github.com/hmseeb/inyon-railway (the unmodified, checksum-pinned Inyon v0.20.2 release, plus tmux and Caddy)
Implementation Details
Signing in. There is nothing to fill in when you deploy. The template generates a password in the INYON_PASSWORD variable and the hub uses it from the first boot. Open your service's Variables tab, copy INYON_PASSWORD, then open the public URL and sign in with it. To change it, edit the variable and redeploy: the hub takes the new value and signs everyone out. You can also change it in Settings, Account, and that one stays until you edit the variable again. A value under 8 characters is skipped with WARNING: INYON_PASSWORD was not applied in the logs, and the previous password keeps working.
Adding machines. In the hub, open Machines, Add machine:
- Run a command on it gives you a one-line command for a laptop or server. It downloads
inyonfrom your hub and connects out to it, with no sudo and no open ports. - Reach it over SSH lets the hub drive a server directly.
Running agents on the hub itself. Start a Terminal session from New session, install the agent with its official installer (for example curl -fsSL https://claude.ai/install.sh | bash), and sign it in. It then shows up in New session with model and permission controls. The home folder lives on the volume at /data/home, so agents, their logins and your repositories survive restarts and redeploys. Running tmux sessions do not: a redeploy closes them, the same as rebooting a computer.
Your phone. The Android app pairs with Open on your phone on the overview. Browsers can install the web app to the home screen, since Railway serves it over HTTPS.
How it is wired. The hub listens only on 127.0.0.1:4777. Caddy in front of it takes Railway's traffic on port 8080 and passes the real client address and HTTPS state through, which is the reverse-proxy setup Inyon's docs describe. That keeps sign-in rate limits per client and session cookies Secure. The hub runs as a non-root user.
Variables
| Variable | What it does |
|---|---|
INYON_PASSWORD | Your sign-in password, generated per deploy. Edit it and redeploy to change it |
INYON_ALLOWED_HOSTS | Host names the hub answers to. Add your custom domain here, comma-separated, after adding it in Railway |
INYON_HUB_NAME | Name the apps show for this hub |
PORT | Port Caddy listens on. Leave it at 8080 |
Troubleshooting
- "This hub doesn't answer to that address": you reached it under a name it was not told about, usually a new custom domain. Add it to
INYON_ALLOWED_HOSTSand redeploy. - "Too many attempts": eight wrong passwords from one address lock it out for a minute.
- The hub's own machine shows a new name after a redeploy: Railway gives each deployment a new container hostname. Your records and installed agents are unaffected.
- Lost the password: set a new
INYON_PASSWORDin Variables and redeploy.
Security. Whoever signs in gets a shell on every machine you add, so treat the hub like an SSH jump host. Use a strong password, and remove machines you no longer use from Machines.
Why Deploy Inyon on Railway?
A hub has to stay on, and it has to be reachable from your phone over HTTPS. Railway gives you both in one click: an always-on container, a TLS domain, and a persistent volume, with no router, tunnel or certificate to set up. Your laptops connect out to it, so it works from anywhere.
Template Content
