{"slug": "show-hn-run-coding-agents-on-your-own-machine-steer-them-from-anywhere", "title": "Show HN: Run coding agents on your own machine, steer them from anywhere", "summary": "Phyra.ai launched roamux, a remote control plane that lets users steer AI coding agents running on their own machines from a phone or browser. The host daemon supports OpenCode, Claude Code, and Codex via a swappable HarnessAdapter, and the company says code, paths, credentials, and model keys never leave the local machine — the cloud stores only metadata such as labels and ids. Users install the host CLI with `curl -fsSL https://remote.phyra.ai/install.sh | sh`, run `roamux login`, then start it with `AGENT_ADAPTER=claude-code roamux host` (or opencode | codex).", "body_md": "**Run AI coding agents on your own machines. Control them from anywhere.**\n\nYour computer stays the execution host — the agent, your repo, shell, files, git state, credentials, and model access never leave it. A phone or browser signs in and steers the agent live.\n\nroamux is a **remote control plane for AI coding agents running on machines\nyou own**. Install a small host daemon on any computer; it dials out to the\ncloud and lets your authenticated devices watch and steer its agents. From your\nphone you can:\n\n- see your connected machines and their live agent sessions,\n- start a new session (pick a machine, a project, and an agent) and send tasks,\n- watch activity stream in real time,\n- approve or deny the agent's permission requests,\n- stop a run, and review the files it changed.\n\n**Your code never leaves your machine.** The cloud routes structured control\nmessages and stores only metadata (labels and ids) — never your files, paths,\ncredentials, or model keys.\n\nSupported agents (bring your own): **[OpenCode](https://opencode.ai)**,\n**[Claude Code](https://claude.com/claude-code)**, and **Codex**. roamux\ndoes not implement its own agent — it drives yours through a swappable\n`HarnessAdapter`.\n\nroamux **drives an agent you already run locally** — it does not ship or proxy a\nmodel. So before you start, install and sign in to **one** of the supported\nagent CLIs on the machine you want to control (this is where your model access\nand auth live — nothing leaves the box):\n\n| Agent | Install | Sign in | \n|---|---|---|\n| **[OpenCode](https://opencode.ai)** | `curl -fsSL https://opencode.ai/install \\| bash` | `opencode auth login` | \n| **[Claude Code](https://claude.com/claude-code)** | `curl -fsSL https://claude.ai/install.sh \\| bash` | `claude` (run once, complete the login) | \n| **Codex** | `npm install -g @openai/codex` | `codex login` | \n\nYou only need one. If the agent isn't installed or signed in, `roamux host`\nrefuses to start and prints the exact commands to fix it.\n\n**On the machine you want to control** (macOS or Linux):\n\n```\n# 1. Install the host CLI\ncurl -fsSL https://remote.phyra.ai/install.sh | sh\n\n# 2. Link it to your account (opens a code — approve it in your browser)\nroamux login\n\n# 3. Start it in the project you want the agent to work on, picking the agent.\n#    AGENT_ADAPTER defaults to `opencode` — set it for Claude Code or Codex.\ncd ~/your/project\nAGENT_ADAPTER=claude-code roamux host      # or opencode | codex\n```\n\nThen open **[the web app](https://remote.phyra.ai)** on your phone\nor browser, sign in, pick your machine → **New Session** → choose the project +\nagent + a task → **Start**, and watch it run.\n\nA host serves **one** agent — whichever `AGENT_ADAPTER` you launched it with.\nTo offer several, run one host per agent.\n\n**File edits:** the agent auto-accepts file edits so it can actually do the\nwork (it still won't run destructive shell commands unattended). Point it at a\nproject you're comfortable letting it change — a git repo is ideal.\n\n**Keep it running in the background** (survives closing the terminal / logout):\n`roamux service install`\n\n| Command | What it does | \n|---|---|\n| `roamux login` | Link this machine to your account (device authorization) | \n| `roamux host` | Start the host daemon and serve your agents | \n| `roamux service install` | Install the host as a background service (launchd / systemd) | \n| `roamux service status` /`uninstall` | Manage the background service | \n| `roamux help` ·`roamux version` | Usage / version | \n\nConfigure via env: `AGENT_ADAPTER=opencode|claude-code|codex` picks the agent\n(default `opencode`), `DEFAULT_PROJECT_PATH=<dir>` sets the project (default: the\ncurrent directory), `HOST_NAME=<name>` labels the machine.\n\n```\nPhone / Browser ─▶ roamux Cloud (web + API)        your machine\n      │                 │  auth · host & session registry     host daemon ─▶ agent ─▶ model\n      │                 │  mints scoped realtime tokens              ▲\n      └─────────────── realtime transport (Ably) ─────────────────────┘   (host dials OUT)\n```\n\nThree boundaries carry the whole design:\n\n- **Protocol** (`packages/protocol` ) — every message on the wire is a**versioned, Zod-validated** envelope. No raw internal objects, ever.\n- **Transport** — how bytes move, behind one interface: a local WebSocket relay\nfor development, and[Ably](https://ably.com) in production. Swappable.\n- **HarnessAdapter** (`packages/agent-adapters` ) — how a runtime is driven.\nAgent-specific code lives*only* inside its adapter; the rest of the system\nspeaks one normalized event vocabulary.\n\n**Security invariants** (enforced in code and tests):\n\n- the agent runtime binds to **localhost only** ;\n- the **host dials out** — nothing local is exposed via an inbound port;\n- routing is authenticated and **scoped per user** , so one account can never\nreach another's machines;\n- there is **no arbitrary remote shell** — clients send a small set of explicit,\nvalidated commands, never shell strings or filesystem paths;\n- repos, credentials, env vars, and model keys **never cross the wire** .\n\nFull write-ups, with diagrams, in [docs/architecture.md](/phyra-research/roamux/blob/main/docs/architecture.md)\n(the as-built local slice) and\n[docs/beta-architecture.md](/phyra-research/roamux/blob/main/docs/beta-architecture.md) (the multi-host, hosted\ndesign of record).\n\n```\napps/\n  host/    the daemon + `roamux` CLI. Runs on the user's machine, dials out,\n           owns sessions. Compiles to a single binary.\n  relay/   local-dev WebSocket router (not used in production — Ably replaces it).\n  web/     Next.js — the mobile-first control UI + API + auth. Deploys to Vercel.\npackages/\n  protocol/        Zod envelopes, commands/events, the Transport interface, channels.\n  agent-adapters/  HarnessAdapter + OpenCode / Claude Code / Codex + a mock for tests.\n  db/              Postgres schema, migration runner, typed repositories.\ndocs/              architecture and design docs.\n```\n\nYou do **not** need any cloud accounts to develop. The fastest path:\n\n```\nbun install\nbun run dev        # relay + host (mock agent) + web at http://localhost:3000\n```\n\nFull guide — local database, real agents, running the test suite —\nin **[CONTRIBUTING.md](/phyra-research/roamux/blob/main/CONTRIBUTING.md)**. Before opening a PR:\n\n```\nbun run check      # typecheck + lint + tests — must be green\n```\n\nTypeScript (strict) · [Bun](https://bun.sh) · [Next.js](https://nextjs.org) ·\n[Zod](https://zod.dev) · [Ably](https://ably.com) (realtime) ·\n[Supabase](https://supabase.com) (Postgres + auth) · deployed on\n[Vercel](https://vercel.com).\n\nContributions are welcome. Start with **[CONTRIBUTING.md](/phyra-research/roamux/blob/main/CONTRIBUTING.md)** for\nsetup, and [CLAUDE.md](/phyra-research/roamux/blob/main/CLAUDE.md) (aliased `AGENTS.md`) for the working agreement\nevery contributor — human or AI coding agent — follows. Keep `bun run check`\ngreen and never weaken a security invariant silently.", "url": "https://wpnews.pro/news/show-hn-run-coding-agents-on-your-own-machine-steer-them-from-anywhere", "canonical_source": "https://github.com/phyra-research/roamux", "published_at": "2026-09-13 08:20:49+00:00", "updated_at": "2026-09-13 08:27:32.418630+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["Phyra.ai", "roamux", "OpenCode", "Claude Code", "Codex", "HarnessAdapter"], "alternates": {"html": "https://wpnews.pro/news/show-hn-run-coding-agents-on-your-own-machine-steer-them-from-anywhere", "markdown": "https://wpnews.pro/news/show-hn-run-coding-agents-on-your-own-machine-steer-them-from-anywhere.md", "text": "https://wpnews.pro/news/show-hn-run-coding-agents-on-your-own-machine-steer-them-from-anywhere.txt", "jsonld": "https://wpnews.pro/news/show-hn-run-coding-agents-on-your-own-machine-steer-them-from-anywhere.jsonld"}}