All plugins

alans-way-computer

Computer-use provider for Hermes: with computer_use.backend: alans-way-computer, the stock computer_use tool drives apps on the user's computer through the Alan's Workspace app, and on the VM's own desktop when the computer is offline. Needs the alans-way plugin's workspace setup. Disclosure: starts the workspace router as a long-running node child per session (filtered environment; desktop input enabled only for that private child, behind Hermes's computer_use approval gate); reaches the user's computer over SSH on the tailnet; resends a call refused as desktop_busy for up to 30 s without a second approval. The provider makes no network calls and stores no credentials.

capthvnsen9Toolsv0.21.14Updated 8 hours ago

About

Computer-use provider for Hermes: with computer_use.backend: alans-way-computer, the stock computer_use tool drives apps on the user's computer through the Alan's Workspace app, and on the VM's own desktop when the computer is offline. Needs the alans-way plugin's workspace setup. Disclosure: starts the workspace router as a long-running node child per session (filtered environment; desktop input enabled only for that private child, behind Hermes's computer_use approval gate); reaches the user's computer over SSH on the tailnet; resends a call refused as desktop_busy for up to 30 s without a second approval. The provider makes no network calls and stores no credentials.

Alan's Way Plugin: computer-use provider

With backend alans-way-computer, Hermes's stock computer_use tool is Alan's Way's native Mac app control.
It drives the user's own computer through Alan's Workspace. When that computer is offline it drives the VM's desktop
instead, with no change on the Hermes side.

It needs a Hermes build with the pluggable computer-use API (Hermes 0.21.6 or newer, from pull request 133556). On older
Hermes the plugin installs and logs that it did nothing.

Setup

  1. Install the alans-way plugin and run its workspace setup. That writes the profile's
    mcp_servers.workspace_browser block, which this provider reuses.
  2. Install this plugin: hermes plugins install alans-way-computer.
  3. Select it by setting computer_use.backend: alans-way-computer in the profile's config.yaml, or run
    hermes config set computer_use.backend alans-way-computer.
  4. Restart the gateway. Check it with hermes computer-use doctor, which runs the router's probe and says
    whether the computer or the VM desktop is answering.

What it does

  • Starts the router from the workspace_browser block as a long-lived node child, one per Hermes session, and
    talks to it over its stdio. The router reaches the user's computer by SSH over the user's Tailscale tailnet and
    falls back to the VM desktop when that fails. A dead or silent router is restarted on the next call.
  • Targets one app. On Mac, it can read that app in front and drive or raise it after the user has been idle for
    at least 2 seconds. Foreground requests ask the host to activate only that target before acting.
    focus_app launches a missing named app when the host advertises computer-launch-v1;
    raise_window asks the host to raise it with activate.
    Keychains, password managers and password fields stay off limits. Other hosts keep their own restrictions.
  • capture (mode="som") returns the element list alone when its named controls cover most of the window; when
    they don't (a canvas, a game, a web area) it attaches the window screenshot and says why. mode="vision" is the
    screenshot alone.
  • On a Mac or Windows computer, each action's reply says which element numbers changed or disappeared and updates
    the list in place, so a number keeps meaning the same control and no capture is needed to read the result. Linux
    (the VM desktop, or a Linux computer) numbers controls by position, so there the reply describes the change and
    asks for a capture before acting by number again.
  • Captures request only changed controls when the app supports it, and recover with a full list if the held
    generation does not match. Older apps still return full lists or reuse an unchanged list.
  • When the app identifies a window, later captures, screenshots and actions stay on that window. Select another
    with capture(window_id=...); a mismatched window reply requires a fresh capture before acting again.
  • Errors carry a code and a next step: in_front means wait a few seconds and retry once, then briefly report
    the refusal; locked and no_window need the user's help, and stale_ref means capture again.
    A capture of an app whose windows are on another Space says so in its note.
  • After a switch between the computer and the VM, app ids and element numbers no longer mean anything. The
    next action returns host_changed: call list_apps and capture again.
  • Prefer set_value with a field's element number. Free typing depends on the host's support; middle and triple
    clicks and modifier clicks return unsupported_action.

Approvals

Approvals follow the user's Hermes settings. The plugin uses that gate without adding per-action chat questions.
For an unattended Telegram bot, either tap Always in Telegram when asked,
or add these entries to command_allowlist in the profile's config.yaml, one each, and restart the gateway (hermes gateway restart; on a supervisord host supervisorctl signal USR1 <program> on the program running hermes gateway run; a plain restart/stop can SIGKILL it mid-drain and corrupt state.db):

command_allowlist:
  - cua:click:background
  - cua:double_click:background
  - cua:right_click:background
  - cua:drag:background
  - cua:scroll:background
  - cua:key:background
  - cua:set_value:background
  - cua:focus_app:background

computer_use.permission_mode applies to the cua driver only and has no effect here.

Serving diagnostics go to the selected profile's logs/workspace-router.log as well as stderr. Each line names
the host, request id and tool, without page content or arguments. Rerunning workspace setup binds the profile log
directory for the browser connector; the computer provider also passes Hermes's currently bound profile home.

Disclosures

  • Long-running child process: each session starts the workspace router from the profile's
    workspace_browser block as a node child and talks to it over stdio. It passes a filtered environment
    (no keys or tokens) plus HERMES_WORKSPACE_ALLOW_DESKTOP_ACTIONS=1, which lets this private child serve
    desktop input; every action still passes Hermes's computer_use approval gate first.
  • Where input goes: the router reaches the user's computer over SSH on the tailnet and falls back to the VM
    desktop (xdotool, a screenshot tool and the AT-SPI bus, if installed; the provider installs none of them).
    On the Mac, raising or launching an app happens only when the model asks, and the host waits for 2 seconds of
    user idle time.
  • Busy desktop: when the Mac reports that another agent holds the desktop, launch, menu and action calls are
    resent, following the host's retry-after hint or every 2 seconds, for at most 30 seconds of waiting. The
    host refused those calls before running them, and Hermes's approval is not asked again.
  • The provider itself makes no network calls, stores no credentials and keeps element trees and screenshots in
    session memory only.

Limits

  • It runs inside the Hermes process, so it cannot load under plugins.isolation: host.
  • It spawns node, resolved the way Hermes resolves an MCP server command.
  • Screenshots have no numbered overlays: use the element numbers in the list. Scroll amounts are wheel ticks,
    converted to pages at a quarter page per tick.

License

MIT License. Copyright (c) 2026 Alex Hansen. See LICENSE.

README from the reviewed commit 9276468; it updates when the author re-pins.

More by capthvnsen

3 plugins by capthvnsen in the catalog.

capthvnsenalans-wayIdle check-ins, a texting voice and workspace-browser skills for a Hermes gateway on a Linux host or macOS guest VM. When the bound Telegram DM has been quiet (2 h by default, 08:00-22:00 user time, backing off when unanswered) the primary bot checks in once; morning briefs, a weekly time-saved report and cross-bot proactivity are opt-in. The workspace-setup skill walks the user through Alan's Workspace, a separate desktop app, and Tailscale. Disclosure: injects internal prompts into the bound DM (needs allow_gateway_injection); turn hooks see every session; reads ~/.config/alans-way/config.json when present; default-on Telegram reply pacing (up to 2.5 s) and remove-only reply cleanup; ships a long-running Node workspace router (SSH to the user's computer over the tailnet, VM fallback) and an operator-started HTTP bridge; setup, run by the human outside the gateway, installs services and packages, adds a tailnet-only SSH key and restarts the gateway; cross-bot proactivity shares sanitized owner-DM excerpts between profiles on one gateway. Full list: the README's Disclosures section at this pin. The plugin's Python makes no network calls; no telemetry, no stored credentials.Communityautomation9capthvnsenconductorHermes leads coding agents on your machines: any terminal coding agent, T3 Code threads, and Orca terminals. It starts a run, waits with no model, and puts one message into the chat that asked when the run finishes, errors, stalls, or needs an approval; T3 and Orca runs can be steered and stopped. It can run 10+ agents at once, one ping each. Two skills: brief researches, asks one round of questions and writes the brief; lead runs the work and checks each report. Disclosure — every start and steer of a coding agent goes through Hermes's approval prompt; it runs only the built-in agents on this machine unless the owner lists extra commands and SSH hosts in plugins.entries.conductor.settings (both empty by default); runs the agent, git status, and ssh and tmux on listed hosts (argv only, no shell strings from user text, never an approval-bypass flag); the agents edit files and run commands with your user rights under their own approval settings; children get a minimal environment plus only the keys that agent needs; keeps one wait thread per run plus a detached agent process or tmux window; writes run records to its plugin data folder and event files, exit codes and logs under ~/.conductor on the machine running the agent; reads and stores no credentials; no telemetry. Finish messages on a messaging gateway need plugins.entries.conductor.allow_gateway_injection: true. In drive mode, which only the user can turn on, it asks Hermes to send up to 5 follow-ups per run on its own.Communitytools

Developer Mode

Explore built-in Hermes toolsets and actions.

HermesAgent

Developer?

Create a Hermes extension for Desktop or agent workflows.

Developer Section