mintOps

mintOps

Tailcat support. Native herdr support. An SSH terminal for iPhone, iPad, and Mac.

Download on the Mac App Store
iPhone and iPad: coming soon to the App Store iPhoneiPadmacOS

mintOps is a terminal operations tool for working on several servers over SSH at once. With built-in Tailcat you can reach a server from anywhere; when the server runs herdr, its workspaces, tabs, and panes become a native UI for your coding agents; and the file browser and web browser let you review what the agent produced without leaving the app. No account, no relay. Your device talks to your server directly.

Take a look around

mintOps — Native herdr mode (iPhone)
mintOps — File viewer (iPhone)
mintOps — Web preview (iPhone)
mintOps — Connections (iPhone)
Native herdr mode Spaces, tabs and panes as native screens, with agent state at a glance.

Tap an image to enlarge it. Use the arrows (or your ← → keys) to flip through.

At a glance

Features in detail

Connect

Tailcat support

mintOps embeds tailcat, Tailscale’s “Tailscale without Tailscale.” tailcat uses only Tailscale’s data plane (WireGuard tunnels, DERP relays, NAT hole punching) and none of its control plane (accounts, coordination server). Run tailcat serve 22 on a server once, and mintOps can SSH into it without a public IP or port forwarding.

  • No account, no coordination serverThere is no Tailscale account, no coordination server, and no separate VPN app. You connect with the tc… address the server prints, or a name published as a DNS TXT record.
  • Starts relayed, upgrades to directThe connection is bootstrapped through a DERP relay and automatically upgrades to a direct path once NAT traversal succeeds. The session tab shows the path and latency, e.g. relay · 79 msdirect · 0.3 ms.
  • Client identity keysGenerate an identity key in Settings or import one from the tailcat CLI. Put its public key in the server’s --allow list to admit only your devices. Without a key, each connection uses a one-time identity.
  • Quick connectType tailcat ssh [email protected] in the sidebar prompt to connect immediately. If no saved connection matches, the connection sheet opens pre-filled. Authenticate with a password, an SSH key, or None (for no-auth-ssh servers).
  • macOS: command-line toolThe Mac build bundles the tailcat CLI. Link it once from Settings and use tailcat ssh, tailcat ping, and tailcat serve in Terminal. Keys created in the app can be exported for the CLI.
  • Connection logSettings → Tailcat → Connection Log shows DNS resolution, relay handshakes, and the switch to a direct path.

Two lines on the server

tailcat genkey --key=default --fixed-region   # a server key whose address survives restarts
tailcat serve 22                              # expose the local sshd through the tunnel

Everything else, including the file browser and web browser, works the same over a Tailcat tunnel.

Agents

Native herdr support

herdr is “a runtime where coding agents live”: a terminal multiplexer (background server + CLI) that runs agents such as Claude Code inside tabs and split panes within a workspace. Right after connecting, mintOps checks whether herdr is installed on the server and, if so, enters a dedicated herdr mode instead of a plain shell. Rather than scrolling a tmux screen on a small phone, workspaces, tabs, panes, and agents all become native UI.

  • Auto-detect, auto-startAfter login, mintOps looks for herdr (including Homebrew, cargo, and local bin paths). If the server process is not running, it starts herdr server for you. Nothing to configure.
  • Workspace sidebarWorkspaces on the server appear as a native list with the focused one selected. Below it, a pinned agent list shows each agent’s state (idle / working / blocked); tap one to jump to its pane.
  • Tabs and split panes, faithfullyA workspace’s tabs show up in a native tab bar where you can create, close, and switch them. herdr’s BSP split layout arrives as cell-based rectangles and is mapped proportionally to the screen, so the pane structure you built on the server is reproduced exactly.
  • Every pane is a real terminalEach pane attaches to a herdr terminal session over its own SSH channel. Frames from the server are rendered by SwiftTerm, and keystrokes and resizes are sent back. Inside a pane it is simply a full terminal.
  • Prompt input barSend prompts to an agent from an input bar at the bottom of the screen instead of the terminal keyboard. Much easier for long instructions on a phone.
  • Zoom on iPad and Mac, pager on iPhoneiPad and Mac switch between the full layout and a single zoomed pane. iPhone always shows one pane large and lets you swipe between panes.

How it fits together

SSH connect ──▶ command -v herdr ──▶ (found) enter herdr mode
  ├─ workspace / tab / pane / agent lists  ← herdr CLI (JSON over SSH exec)
  ├─ pane layout  ← herdr pane layout → mapped proportionally into SwiftUI
  └─ pane terminal ← herdr terminal session control <pane> (frames ↔ input/resize)
Review

File browser

When you give an agent a task, the result is a set of file changes on the server. You should not have to type git status, git diff, and cat in a narrow terminal and scroll through colorless text to see them. Tap the folder button on the right of the tab strip in herdr mode and the workspace turns into a file browser. It is read-only, installs nothing on the server, and never runs a command that modifies your files.

  • Per workspace, git-awareThe root is the git repository that contains the focused pane’s working directory. If it is not a git repository, that directory itself is shown.
  • Changed-file listIn a git repository you see the difference between the working tree and HEAD (staged + unstaged + untracked) with M / A / D / R / ? badges. Each row has “Diff” and “View” buttons.
  • Colored diffsDiffs are rendered with diff2html and syntax-highlighted. iPad and Mac switch between side-by-side and unified; iPhone uses unified.
  • The right viewer for each fileMarkdown is rendered; HTML is opened in a web view together with the images, CSS, and JS it references; source code gets syntax highlighting and line numbers; images get a pinch-to-zoom preview; PDFs open in a PDF viewer. Markdown and HTML can be switched to a raw view.
  • Directory tree and filename searchOutside a git repository you get a collapsible tree, and typing part of a filename finds matches recursively across subdirectories. Hidden files are included.
  • Safe size limitsA size limit (100 MB by default, adjustable in Settings) applies to each file, image, and HTML resource so a huge file never freezes the app. The download cache is cleared when the session ends.

Terminal streams stay alive while you browse files. Switching back to the terminal is instant.

Review

Web browser

When an agent builds a web app, the result is a dev server running on the remote host (pnpm dev, next dev, python -m http.server…). Normally you would hunt for the port in terminal output, set up ssh -L forwarding in another terminal, and open a browser. On a phone that is practically impossible. In mintOps it is a single tap on the globe button in the tab strip.

  • Automatic server discoverymintOps finds processes started under the workspace directory that are listening on TCP ports. It uses only /proc on Linux and lsof on macOS, so nothing is installed on the server.
  • HTTP onlyEach discovered port gets a real HTTP request, and only the ones that answer become tabs. Databases, Redis, and other non-HTTP ports are left out.
  • One tab per portSeveral servers mean several tabs you can switch between. Each tab shows the process name and port.
  • SSH port forwarding, handled for youA 127.0.0.1 port on your device is connected to the remote port over an SSH direct-tcpip channel. The same port number is tried first, so hard-coded references like localhost:5173 (HMR websockets, for example) keep working. Listeners bind to loopback only and are never exposed on the LAN.
  • A live tab listWhile the screen is visible the workspace is rescanned every 5 seconds. New servers get tabs, dead ones are removed, and a short grace period keeps tabs from flickering when a dev server restarts.
  • Back · forward · reloadFollow in-page links inside the WKWebView. Cookies and login state persist across tabs and reloads within a session and are discarded when it ends. On the Mac you can attach Safari Web Inspector.

How it works

Globe button ──▶ list listening ports + process cwd on the server (/proc or lsof)
             ──▶ probe each port for HTTP from the device over direct-tcpip (3 s)
             ──▶ local listener on 127.0.0.1:<port> ↔ SSH channel ↔ remote port
             ──▶ open a WKWebView tab · rescan every 5 s

The foundation: an SSH terminal

  • Multiple SSH sessionsConnect to several servers at once in tabs. Connection details are saved and passwords are kept in the Keychain.
  • A complete terminalA SwiftTerm-based emulator and a Citadel (swift-nio-ssh) SSH client, with 256 colors, mouse support, and resizing.
  • AuthenticationPassword, SSH key, and None for Tailcat no-auth-ssh servers.
  • Open-source creditsThe libraries used and their full license texts are listed under Settings → About (on the Mac, the app menu → About mintOps).

iPhone · iPad · macOS

One codebase, three platforms. The layout adapts to each device’s screen size and input.

iPhone

  • One herdr pane at a time, swipe to move between panes
  • Unified diffs
  • Workspace and agent switching from the top menu
  • File and web browser use the full screen

iPad

  • Sidebar (workspaces, agents) plus a work area
  • Full pane layout or single-pane zoom
  • Side-by-side or unified diffs
  • File list and viewer side by side

macOS

  • Same layout as iPad, with a menu bar and a ⌘, Settings window
  • Bundled tailcat command-line tool with one-click install
  • Debug previews with Safari Web Inspector
  • Open-source list under the app menu → About mintOps

How to use it

  1. Save a server connection, or type tailcat ssh user@server in the sidebar prompt to connect right away.
  2. If the server has herdr, mintOps enters herdr mode automatically. Pick a workspace in the sidebar and a tab in the tab bar.
  3. Give the agent work from the terminal inside a pane or from the prompt bar at the bottom.
  4. Tap the folder button to review changed files, diffs, and newly created documents and images.
  5. Tap the globe button to open the web servers running in the workspace, right inside the app.

System requirements

  • iOS 26.2 or later (iPhone · iPad), macOS 26.2 or later
  • A server you can reach over SSH. Native herdr mode turns on automatically when herdr is installed on the server.
  • Tailcat connections require tailcat serve running on the server via the tailcat CLI. Plain SSH connections do not need it.
  • The file browser and web browser use only standard tools on the server (git, find, /proc or lsof). Nothing extra to install.

Privacy

mintOps has no accounts and no relay servers operated by Mintech. All traffic goes directly between your device and your server over SSH (or SSH inside a Tailcat tunnel). Connection details and Tailcat identity keys are stored only in your device’s Keychain and app storage, and the file browser’s download cache is deleted when the session ends.

Privacy Policy by language

Download for Mac

Alongside the Mac App Store version, you can also download a build signed and notarized with our Apple Developer ID right here. Unlike the App Store version it runs without the sandbox, so the tailcat command is available in the terminal. Unzip it and drop it into your Applications folder. Requires macOS 26.2 or later.

Download mintOps for Mac (zip) Version 1.0 · build 2609161311 · 36.0 MB

Notarized, so Gatekeeper only shows the usual "downloaded from the internet" confirmation on first launch. All Mac builds

Release notes

Roadmap

What is being built and what is done, per release.

Built with open source

All open source software and full license texts →