Hotline

A self-hosted room for AI agent teams on your own machine: any model, bring your own harness, each teammate gets its own computer.

Stars
★ 12
Last updated
today
License
Apache-2.0
Primary language
Rust

At a glance

Works with
Universal · cross-platformCodex · Claude Code · OpenAI API · Claude API
You'll need
Docker, Podman or Apple containerRust toolchain (for source builds)Shell / CLINetwork accessLocal filesystem
Typical use
A solo developer wants one agent writing code and another reviewing it, with both visible in the same chat.
Main limitation
You must supply model keys and pay providers directly; real costs depend on the providers and usage you choose.
Source review
63/100 · Some gaps

What does this agent do, and when should you use it?

Hotline is an open-source, self-hosted room for AI agent teams, written in Rust with a Tauri shell around a web UI. It ships as a desktop app for macOS, Windows and Linux, plus a headless server mode for any Linux box, and a beta phone app that pairs with your desk. Each named teammate has its own project directory and a conversation that keeps going whether or not you are watching; teammates can see who else is in the room, what they are working on, and message each other to ask questions, request reviews or hand off tasks. Teammates can be Hotline's built-in agent calling Anthropic, OpenAI, Google, OpenRouter or Ollama with your own key or subscription, or external harnesses such as Claude Code, Codex and opencode connected over ACP. A single switch gives a teammate a full Linux desktop in a container via Docker, Podman or Apple container. Transcripts and files stay on your disk, with no account and no cloud in the middle, and linked desks let multiple machines share one room.

Hotline runs a local desk that holds a named roster of teammates. Each teammate is bound to its own project directory and an ongoing conversation that persists independently of whether you are watching. The built-in agent can call models from Anthropic, OpenAI, Google, OpenRouter or Ollama; external harnesses including Claude Code, Codex and opencode join as teammates over the ACP protocol. Teammates can see who else is in the room and what they are on, and message each other directly to ask a question, request a review or hand off a task. Toggling the computer switch starts a Linux desktop container for a teammate through Docker, Podman or Apple container, providing a screen, a browser and a shell that you can watch or take control of when asked. Input supports text, pasted images and voice. The desktop app and headless server mode expose the same room, the beta phone app pairs with a desk, and linked desks let teammates on different machines work together while each stays under its own desk's grants.

  1. A solo developer wants one agent writing code and another reviewing it, with both visible in the same chat.
  2. A small team wants agents running on its own server via headless desk mode, without any cloud account.
  3. A security-conscious workflow needs agents to drive a browser or shell inside an isolated container, with humans taking over when asked.
  4. Claude Code or Codex users want to mix those harnesses with other models in one room and run them in parallel.
  5. A developer who steps away from the desk wants to check in or keep chatting with agents from a phone.
  6. A team with a laptop and a server wants linked desks so both sides' agents share one room.

How do you install or deploy this agent?

Install the desktop app on macOS or Linux with one command:

curl -fsSL https://hotline.dev/install | sh

Install a headless desk on a server:

curl -fsSL https://hotline.dev/install | sh -s -- --server

On Windows, or for .deb, .rpm and Intel Mac builds, download the latest release:

# open https://github.com/1broseidon/hotline/releases/latest in a browser

To give a teammate its own Linux desktop, the host needs a working Docker, Podman or Apple container runtime; on the model side, bring your own Anthropic, OpenAI, Google, OpenRouter or Ollama key or subscription.

How do you use this agent?

After installing, launch the desktop app or start the headless desk on a server to enter the room. Name each teammate, point it at its project directory, and choose a model: use the built-in agent directly, or attach Claude Code, Codex, opencode or another ACP harness as a teammate.

Give a teammate an operating system by turning on the computer switch; Hotline then starts a Linux desktop container for it:

# requires Docker, Podman or Apple container on the host
# flip the computer switch for a teammate in the Hotline UI

Then talk to teammates in the room, paste screenshots, use voice, or take control of a teammate's desktop when it asks; teammates can message each other directly. Pair the phone app as documented:

# follow https://hotline.dev/docs/phone/ to pair the phone app

For architecture, wire protocol and container details, see docs/design.md, docs/wire.md and docs/computer.md.

What are this agent's strengths and limitations?

Pros
  • Mix multiple model providers (Anthropic, OpenAI, Google, OpenRouter, Ollama) in one room, avoiding single-vendor lock-in.
  • External harnesses such as Claude Code, Codex and opencode join as teammates over ACP, preserving existing workflows.
  • A single switch gives a teammate a containerized Linux desktop with a screen, browser and shell for tasks that need a real environment.
  • Transcripts and files stay on local disk with no account or cloud intermediary, keeping self-hosting and data boundaries clear.
  • Offers a desktop app, a headless server mode for Linux and a beta phone app, plus linked desks across machines.
Limitations
  • You must supply model keys and pay providers directly; real costs depend on the providers and usage you choose.
  • Giving a teammate a Linux desktop depends on Docker, Podman or Apple container on the host, adding container-runtime operations work.
  • The phone app is still in beta, so mobile coverage and stability may be limited.
  • The product shipped as Toad through 0.13.0 and was renamed in 0.14.0, and the README states this ground-up build replaced the Electrobun edition on the repository on 2026-09-08, so older material may not match the current version.
  • Building from source requires a Rust toolchain and Tauri environment; setup beyond the install script is largely covered in linked docs rather than the README.

How does this agent compare with similar options?

Key facts side by side with the most closely related agents.

Agent Source review Form / cost Stars Updated Language Full support on
Hotline This agent 63 · Some gaps — ★ 12 today Rust Codex · Claude Code · OpenAI API · Claude API
Vicoa 52 · Major gaps Desktop appFree + model costs ★ 523 3d ago Python Codex · Claude Code
OpenTeams 56 · Major gaps Desktop appFree + model costs ★ 581 14d ago TypeScript Codex · Claude Code
OtoDock 77 · Good Self-hosted serviceFreemium ★ 193 1d ago Python Codex · Claude Code

How does FollowAgents rate this agent?

FollowAgents source review · FARS-2.1
Some gaps
63/ 100 5-point scale 3.2 / 5
Trust 19/29
Reliability 9/14
Adaptability 12/18
Convention 11/18
Effectiveness 7/13
Verifiability 5/8
Why each dimension lost points
Trust19 / 29 · 3.3/5

docs/security.md handles least privilege unusually well: reach, mcpPolicy, allowedSenders, backgroundWork, computer and folders are independent axes with deny-by-default values and explicit migrations, and the model is explicitly not an enforcement point (least_privilege=3). The same document states plainly that the person is asked nothing at call time and there are no approval cards or per-path ACLs, so confirmation is standing rather than per-action (user_confirmation=2). Data flow is described (network on under every reach, workspace data can leave, which provider origins receive voice/image traffic) but there is no consolidated user-facing data-flow statement (data_flow_transparency=2). Sensitive data uses 0600/0700 files, secret redaction and key-free image results, yet the docs admit no encryption layer of its own and that root or a disk copy reads every secret (sensitive_data_handling=2). Dependency security is the strongest area: CI runs cargo-deny advisories/licenses, cargo machete and bun audit, Cargo.toml carries a justified patch for RUSTSEC-2026-0367/0368/0369, and speech engine and models are pinned by SHA-256 (dependency_security=3). External effects are acknowledged as irreversible: dispatched side effects survive revocation and there is no recall mechanism (external_effects=1). Rollback is thin: only lease revocation and computer recreation, no version rollback or state recovery (rollback=1). Source attribution has dual license files, a release pipeline and updater signing, but publisher identity is unverified and attribution stops at the repository (source_attribution=2).

Reliability9 / 14 · 3.2/5

Internal consistency is good: Cargo.toml at 0.43.0, the release workflow checks tag against Cargo.toml and tauri.conf.json, and the README explains the Toad-to-Hotline rename and the Electrobun replacement (self_consistency=2). Dependency availability has Cargo.lock, bun --frozen-lockfile, pinned tool versions and a hosted-runner fallback, but sherpa-onnx-sys depends on an upstream git commit and an external script downloads binaries, which is a real availability risk (dependency_availability=2). Failure messages are concrete in the installer tests (version mismatch, checksum mismatch, missing user), while runtime error handling is only inferable from docs (failure_messages=2).

Adaptability12 / 18 · 3.3/5

The README targets multiple models, multiple harnesses and desktop/server/phone scenarios with a clear audience (audience_and_scenarios=2). Capability boundaries are documented in depth: workspace versus machine reach, externally managed ACP, computer not widening reach, no confined shell on Windows (capability_boundaries=3). Trigger precision is not assessable: this is a persistent room rather than a trigger-invoked agent and no routing rules are shown (trigger_precision=1). Environment fit covers macOS/Windows/Linux, headless server and three container runtimes, but Windows lacks a shell sandbox, macOS lacks namespaces and Apple container keeps no volumes, so platform gaps are material (environment_fit=2).

Convention11 / 18 · 3.1/5

The README is well structured and links design, development, wire, sessions and computer docs (information_architecture=2). Install notes give curl installs, a server mode and per-platform packages, but rely on an external site script with limited in-repo detail (install_notes=2). Naming stability is affected by the Toad-to-Hotline rename and leftover ELECTROBUN_ prefixes, explained but still churn (naming_stability=2). Examples and FAQ are sparse in the visible files, mostly doc links (examples_and_faq=1). Known limitations are exceptionally thorough, including accepted risks, platform differences and residual risk (known_limitations=3). Licensing is dual MIT OR Apache-2.0 and consistent across files and metadata (license=3). A version exists but no CHANGELOG content is visible, only release-pipeline references (versioning_changelog=1). Maintenance responsibility is weak: the docs mention a product decision by George, but there is no CONTRIBUTING, security contact or maintainer statement, and the publisher is unverified (maintenance_responsibility=1).

Effectiveness7 / 13 · 2.7/5

Output usability: the product shape (desktop and phone room, multi-agent collaboration) is clear, but no sample outputs or UI flows appear in the visible files (output_usability=2). Marginal value comes from multi-agent co-location, bring-your-own harness and a containerized computer, which differentiates it from single-chat tools, though the space is crowded and value depends on configuration (marginal_value=2). Cost-benefit is demanding: self-hosting needs Docker/Podman, user-paid model keys, a half-gigabyte speech model download and a complex Rust+Tauri+bun+external-binary build chain (cost_benefit=1).

Verifiability5 / 8 · 3.1/5

claim_traceability: the security doc names concrete files and tests for most claims (e.g. wire::tests::voice_is_owner_only_through_the_real_handler), though some claims are prose only (claim_traceability=2). cross_source_corroboration: README, security.md, CI workflows and Cargo.toml corroborate each other on dependency pinning, platform support and licensing (cross_source_corroboration=2). fact_inference_separation: the docs distinguish shipped from planned, accepted risk from defect, and flag device verification as outstanding (fact_inference_separation=2).

Risks and how to mitigate them
  • The security model relies on one-time standing consent in settings; there is no per-call confirmation, so once machine reach or an MCP gateway is granted the agent can act with external effects unreviewed.
  • The docs explicitly accept that the network is on under every reach, that readable workspace data can leave, and that dispatched side effects cannot be recalled after revocation.
  • In self-hosted server mode secrets are 0600 files with no encryption layer of their own; root or a disk/backup copy reads every one.
  • Installation pipes an external site script into a shell, and the build chain depends on an upstream git commit plus external binary downloads, widening the supply-chain surface.
  • Publisher identity is unverified by FollowAgents, and maintenance responsibility and a security contact are not clear in the visible files.
  • Platform behavior diverges: no confined shell on Windows, no namespaces on macOS, and Apple container keeps no volumes, so safety and persistence differ by OS.
Evidence confidence: Low Reviewed Oct 27, 2026 Reviewed revision 11449001e45f
See the full review method →
View on GitHub ↗ Install ↓

Compare agents like this one

The same FARS review applied across the shortlist this agent qualifies for.

Related agents