Mons / Guide

One setup.
Your ongoing work.

Install Mons, pair your host, and return to the same working session. Find detailed setup, session commands, and connection troubleshooting here.

Get started

Take your working session with you.

Install the app first. Add Mons Host for Easy Pair, or connect directly to an existing SSH server.

  1. Install on iPhone or iPad

    Get Apple TestFlight on your iPhone or iPad. Open the Mons invitation on that device, tap Accept, then Install.

    Already testing? Open Mons in TestFlight and tap Update. If the invitation is closed or full, check again later. TestFlight shows compatibility and build expiry.

  2. Install Mons Host

    On your Mac or Linux host, run this as your normal user, without sudo:

    curl -fsSL https://mons.cc/install.sh | sh

    Mons CLI packages and checksums are available from official downloads for macOS 13+ and Linux x86_64/arm64. The curl installer and mons update read the official website's version manifest; downloads do not require GitHub access or a GitHub account. Installation starts the local user-level Host service. Linux requires an available systemd user manager. The installer does not enable SSH.

    Host builds with bundled Herdr also prepare a private persistent terminal; no separate Herdr/tmux installation is needed. Check mons help for open and ls before following the built-in terminal guide. Session management additionally requires mons session --help to list attach, stop and delete. New source code is not automatically available in published downloads. If those commands are missing, use the features provided by your installed version.

    macOS development previews are ad-hoc signed, without Developer ID signing or Apple notarization; Gatekeeper may block them. See download verification before installing.

  3. Enable SSH, then pair

    Enable SSH access on the host, then check Mons Host and generate a pairing offer:

    mons status
    mons pair

    Keep the command running. In Mons, choose Add Connection → Easy Pair, then Scan QR Code, or paste the link and tap Add Pairing Link.

    Your phone and host do not need the same Wi-Fi. Pairing authorizes the device; terminal access still needs a working SSH server.

Before you install

Verify your download.

Verify a download without installing

Choose your platform and published version from official downloads. Download the ZIP and its matching .sha256 file into the same directory.

Replace VERSION with that published version. Run the command for your platform in the download directory:

# macOS
shasum -a 256 -c mons-VERSION-macos-universal.zip.sha256

# Linux x86_64
sha256sum -c mons-VERSION-linux-x86_64.zip.sha256

# Linux arm64
sha256sum -c mons-VERSION-linux-aarch64.zip.sha256

Only extract the ZIP after its checksum matches. A checksum verifies integrity. It does not establish developer identity or Apple notarization.

To verify the current platform download and its bound installer without installing, run:

curl -fsSL https://mons.cc/install.sh | sh -s -- --verify-only

This check does not install the CLI or change the Host service. If verification fails, keep the exact error and version. Do not bypass checksum, SBOM, signature, or TLS checks.

Using Mons

Switch screens. Not sessions.

At your desk or on the move, continue the same shell, TUI, or coding-agent workflow. Your persistent session and its running tools stay on the host while you switch between your computer, iPhone, and iPad.

Keep your host awake, online, and reachable. Mons needs a network connection; opening a plain SSH shell does not create a persistent session.

Start on your computer

If mons session --help lists attach, run this in a terminal on your host to create or return to a private session named work. A bundled-terminal build without session management can use mons open work instead:

mons session attach work

This creates, starts or attaches to work; mons open work remains an alternative. Start your shell tools or coding agent inside that session. In another host terminal, mons ls lists the built-in sessions. Run mons open to enter default; bare mons shows help without opening a session. See the CLI guide before stopping or deleting a session.

Mons manages its bundled Herdr separately from any Herdr or tmux you already use. Those external sessions remain available as optional alternatives.

CLI 0.6.10 adds a compact sidebar default for bundled Herdr. Older unchanged Mons defaults update only when no private session is active. Mons preserves custom settings and active-session configurations. This default does not control the app's iPad sidebar or external Herdr.

Continue on your phone. Return to your computer.

Compare the SSH fingerprint shown in Mons with the fingerprint on your server before choosing Trust Host & Connect.

On your iPhone or iPad, choose the built-in session you opened on the host, such as work. Continue where you left off, then leave the terminal view without stopping the session. Back at your computer, run mons open work to rejoin that same session.

Existing external Herdr/tmux sessions can also be selected. Choose Open SSH for a shell without a persistent session (called Open Plain SSH in older app builds).

Easy Pair uses the paired device key. The app's connection details and diagnostics show Credential → Pair Auth; no separate SSH password or private key entry is required. This label identifies the authentication method, not whether the host is reachable or the terminal is ready.

Connect with Manual SSH

On macOS, enable System Settings → General → Sharing → Remote Login for your user. On Linux, use an existing SSH server and valid credentials.

In Mons, choose Add Connection → Manual SSH. Enter a connection name, host address, port, username, and password or supported private key, then tap Save. The default SSH port is 22.

The address must be reachable from your phone. Manual SSH works without Mons Host; remote access needs your existing network or VPN setup. For a persistent session without the bundled terminal, install and start your own Herdr or tmux.

Plain SSH does not create a persistent session. Mons does not install or start a coding agent for you.

Terminal keys and Codex shortcuts

Use ⇧ for Shift and ⌥ for Option. A selected modifier applies to the next key. Tap Fn to show F1–F12.

Tap the Mons icon to open Shortcuts. In Codex, ⇧← sends Shift+Left. Rename sends /rename to Codex. It does not change the Mons session name.

The built-in and external Herdr categories use the same icon in Light and Dark appearances. These controls use the same behavior on iPhone and iPad.

These controls require a build that includes them. A source update does not update an installed app.

Remember the last shortcut category

Mons remembers your last category on this device, including after the app restarts. It does not synchronize this choice between devices.

After you use the Herdr or Mons category to select a window, that category remains selected.

The AI category uses the current window's agent. Choose AI to show Codex, Claude, or generic AI controls. Mons remembers the category, not the agent identity.

If a session cannot use the saved category, Mons temporarily shows Favorites. This fallback does not replace your saved choice.

Test, update, and share feedback

Try connecting, typing, returning to the same session, and switching between Wi-Fi and cellular. Note the route and any error when a connection fails.

Use TestFlight → Mons → Send Beta Feedback, or report an issue. Include app/Host versions, steps, and expected versus actual behavior.

Review screenshots and diagnostics before sharing. Keep passwords, private keys, tokens, and active pairing links private.

CLI guide

Manage the session, not just the connection.

Check mons --version and mons session --help first. The commands below require a build that lists session management; merging a source branch does not publish a new CLI package.

Create, attach, and list

mons
mons open
mons session attach work
mons open work
mons ls
mons ls --json

Bare mons always shows help without creating, starting or attaching to a session, including inside an existing Mons terminal. Use mons open to enter default. session attach needs a name and can create or start that session.

Names use 1–64 ASCII letters, digits, dots, underscores or hyphens; . and .. are not names. Stop/delete require the exact spelling, including case. For a leading hyphen, use mons session attach -- -work; stop/delete use the same separator.

Stop and permanently delete

Stopping ends the session's pane processes, including tools and agents. Save work and check the exact name with mons ls --json before running:

mons session stop work

Saved state remains, but attaching again does not restore the original processes. Deletion is irreversible. Only remove a named session after it has stopped and you no longer need its saved state:

mons session delete work

Delete never stops a running session for you, refuses unknown/unreadable status, and cannot delete default. Do not attach and delete the same session concurrently. External Herdr/tmux sessions are untouched. There is no mons session detach command; stop is not a substitute for leaving the terminal.

Inspect the Host and logs

mons status reports the CLI version and the responding Host's build version separately. An older Host shows not reported by Host. The command does not start or restart services.

mons --version
mons -V
mons status
mons logs -n 200
mons logs -l debug
mons --licenses
mons help

--version and -V show binary/protocol versions; there is no mons version subcommand. status checks the Host and bundled terminal. logs (also log) follows new records by default; -n reads 1–2000 recent lines once. Do not combine -n with -f/--follow.

-l/--level filters displayed records; it does not enable recording or recreate missing debug events. mons help, mons --help and mons -h show global help. Keep credentials, terminal content and active pairing links private.

Update and manage pairing

mons update --check
mons update

The check-only command changes no installation. A native update reads the official website's platform manifest and does not downgrade a newer local build. It cannot install an unpublished source version. A real update may briefly restart the Host.

mons pair creates a fresh QR/link; keep it running while pairing. mons unpair revokes every paired device on this Host. It does not uninstall the service or delete sessions.

mons serve and mons serve --once run the Host in the foreground or for one cycle; they may initialize state and are not read-only checks. Do not start a second Host alongside the installed service. install is not a native ZIP CLI command.

Need a hand?

Check the connection first.

The Host installer returns 404, or mons is not found

Check the failing download URL and requested version against official downloads. A 404 can come from the installation entry, version manifest, platform ZIP, checksum, or platform installation script; it does not by itself mean Host downloads are unpublished. Do not bypass verification. After a successful native installation, the CLI is normally at ~/.local/bin/mons; add ~/.local/bin to your PATH and check the installer's final output.

Pairing works, but session discovery fails or SSH times out

Easy Pair and Manual SSH both need a running SSH server on the host. Installing Mons Host and completing pairing do not enable SSH. If the SSH service is off, both session discovery and Open SSH will fail to connect. You may see Session discovery failed, The Host SSH service is unavailable., or SSH connection timed out.

macOS: Open System Settings → General → Sharing, open the options for Remote Login, and turn it on. Under Allow access for, make sure your login user is allowed. See Apple's Remote Login guide.

Linux: Install and start an OpenSSH server using your distribution's instructions, and confirm it is listening on the SSH port (22 by default). For Ubuntu, see the OpenSSH server guide.

After enabling SSH, return to Mons and tap Retry in the connection's session list, or choose Open SSH. If SSH is already running, a timeout can also indicate an address or network problem; check the connection settings and mons logs -n 200.

Pairing expires or SSH cannot connect

Run mons pair again if the QR/link expires. Check mons status and mons logs -n 200. First check that the SSH service is enabled, then verify the address, port, and username. Easy Pair uses the paired device key (Pair Auth); Manual SSH uses your password or private key. A changed host fingerprint needs verification on the server.

Do I need to install Herdr or tmux?

A Host build with bundled Herdr provides its own persistent terminal. Use mons open for the default session, mons open work for a named session, and mons ls to list sessions. Bare mons shows help. You do not need a separate Herdr/tmux installation for these sessions. Your existing external Herdr/tmux sessions remain separate and supported.

If mons help does not list open and ls, that Host build does not include the bundled terminal. Use an existing external multiplexer or Open SSH.

No persistent sessions appear

On a Host build with bundled Herdr, check mons status for the bundled multiplexer state and use mons ls to see its sessions. Open a session on the host with mons open work, then tap Retry in the app. If the bundled multiplexer is unavailable, check mons logs -n 200.

For an external Herdr/tmux installation, start a session in that multiplexer first. With no running persistent sessions, successful discovery shows an empty list. Use Open SSH if you only need a shell.

The session command is unknown, or a session is stopped

Check command -v mons, mons --version and mons session --help. An older published package does not gain commands from a source merge; mons update only installs published versions. A stopped session retains saved state, not its original processes. Use mons session attach work to start or enter it only when that is intended.

For a failed stop/delete, keep the original error and inspect mons ls --json. Never delete files to bypass an unknown status, and do not confuse the app's display alias with the real CLI session name. See the CLI guide for lifecycle and deletion limits.