Skip to content

About

oly runs coding agents and long-running commands in persistent, supervised terminal sessions. The daemon owns the PTY, so you can close your terminal and come back from the browser or your phone.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

95 stars

Watchers

1 watching

Forks

Repository files navigation

oly — Open Relay

oly logo

Close your laptop. Your agents keep working. Come back to the one that needs you.

npm version License: MIT

The oly tree dashboard in a terminal beside the same sessions in the browser UI

Run an interactive CLI once. Close your terminal. Come back from another terminal or a browser — with the process still running and its output recorded.

oly is a local-first session supervisor for coding agents, REPLs, and long-running commands that still need a human in the loop. It runs the CLI you already use — no model-provider integration — and serves both the oly ls --follow dashboard and a password-protected web UI at http://127.0.0.1:15443.

Why oly?

  • Walk away without losing the job. The daemon owns the PTY, not your terminal.
  • See who needs you. Lifecycle status and agent-reported program status roll into one list.
  • Check in, don't babysit. Read recent output, inspect a live TUI, or wait for a likely input-needed checkpoint.
  • Intervene without attaching. Send text, keys, or application mouse input; take over interactively when needed.
  • Pick up from anywhere. Use the terminal or the browser — including your phone — and route work to connected machines.
  • Give agents a reliable control surface. JSON metadata, bounded byte pages, and resumable cursors support scripted supervision.

Think persistent terminal sessions + a supervision API, not another agent framework. Use your shell for quick commands; use oly when a job needs a durable home.

See it

Terminal dashboard — oly ls --follow --node-all --limit 5000 lists every session, or groups them by working directory.

List view Tree view
oly ls --follow list view: sessions grouped by node with live rate and output columns oly ls --follow tree view: sessions grouped by working directory

Browser UI — the same daemon from any device, with live status and one-click attach.

Browser session list grouped by working directory, with live status and activity charts

Browser session detail: live terminal, text input, quick keys, and file upload

On a phone — the web UI installs as a PWA, so you can check a prompt and answer it without a laptop.

Sessions Detail
Browser session list on a phone Browser session detail on a phone with the mobile key bar

Install

npm install -g @slaveoftime/oly

The npm package bundles binaries for Linux x64, Linux arm64, macOS Apple Silicon, and Windows x64. No GitHub asset download is needed during installation.

0.5.0-beta.2 is available: a breaking preview, not the stable channel. Stable installs still use the 0.3 line. Try npm install -g @slaveoftime/oly@beta or the GitHub prerelease. Back up state and read the migration guide before upgrading. See the release notes and verification.

Other installation options

Homebrew (stable):

brew tap slaveOftime/open-relay https://github.com/slaveOftime/open-relay
brew install slaveOftime/open-relay/oly

Prebuilt binaries: download a platform archive from GitHub Releases.

Cargo (stable):

cargo install oly

Building from source requires Rust and Node.js/npm: release builds compile and embed the web UI. See Contributing for development setup.

From launch to handoff

# Start the daemon (skip this if it is already running).
# Default: password-protected web UI at http://127.0.0.1:15443.
oly daemon start --detach

# Run your preferred CLI in the background; save the returned session ID.
oly start --detach copilot

# See sessions and inspect recent output.
oly ls
oly logs <id> --tail 40

# Inspect a TUI and, after reviewing its prompt, reply without attaching.
oly logs <id> --screen
oly send <id> "continue" key:enter

# Take over interactively. Ctrl-D detaches; the child keeps running.
oly attach <id>

Replace copilot with claude, codex, another agent, or any interactive command. Pass oly options before the child command.

Open http://127.0.0.1:15443 for the browser UI, or use oly ls --follow --node-all --limit 5000 for the live terminal dashboard.

A few commands worth remembering

Want to… Command
Wait for a likely checkpoint oly logs <id> --wait prompt --timeout 5m
Inspect metadata and exit status oly info <id> / oly info <id> --json
Watch without sending input or resizing oly attach <id> --observe
Interrupt the child oly send <id> key:ctrl+c
Export recorded display bytes oly export <id> > capture.bin
Stop a session oly stop <id>
Start a fresh run from saved launch metadata oly restart <id>
Teach an agent how to supervise sessions oly skill / oly skill --subagent

Know the boundaries

  • Persistent sessions, not immortal processes. Closing a client does not stop the child. Stopping/crashing the daemon or rebooting the host does; retained recordings remain, but live PTYs cannot be recovered. restart launches a new run.
  • Hints, not task understanding. Prompt and idle detection can be wrong. Check fresh output and the actual result; successful input delivery is not completion.
  • Shared control, not exclusive ownership. Multiple attached controllers can type concurrently; the last successful resize wins. Coordinate with other users.
  • Local-first, not a sandbox. Child commands run with the daemon user's privileges. Keep HTTP on loopback or put remote access behind a trusted tunnel and authentication gateway. View-only mode is not a security boundary.

Go deeper

MIT licensed. If oly makes your workflow easier, a star on GitHub helps others find it.

About

oly runs coding agents and long-running commands in persistent, supervised terminal sessions. The daemon owns the PTY, so you can close your terminal and come back from the browser or your phone.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

95 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages