> ## Documentation Index
> Fetch the complete documentation index at: https://sesame-3de8950d-docs-hermes-simplify-plus-vpn.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect Hermes to Sesame

> Run new or existing Hermes processes through Sesame.

Run every command on the machine where Hermes runs. Pick the path that matches you — each one is complete, top to bottom.

<Note>
  This guide uses the cloud broker at [getsesame.dev](https://getsesame.dev). Running your own broker? The only difference is `sesame login --broker-url <your-url>`.
</Note>

## Hermes is already running

Sesame detects the running Desktop, gateway, service, or terminal processes and restarts them through the broker. Run these in order:

```bash theme={null}
curl -fsSL https://getsesame.dev/install.sh | sh
sesame login
sesame proxyd install
sesame onboard hermes
sesame onboard hermes --verify-only
```

`sesame onboard hermes` shows what it found and asks before restarting anything. Confirm the prompt. When `--verify-only` reports your processes as protected, you're done.

<Note>
  A bare interactive terminal session can't be moved automatically — exit it, then start it again with `sesame launch -- hermes`.
</Note>

## Starting fresh

Install Hermes, then start it through Sesame instead of directly:

```bash theme={null}
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
source ~/.zshrc  # or: source ~/.bashrc

curl -fsSL https://getsesame.dev/install.sh | sh
sesame login
sesame proxyd install
sesame launch -- hermes
```

For a gateway, the last line is `sesame launch -- hermes gateway run` instead.

## After setup

Two things to remember:

* Add a secret in the dashboard (**Secrets → Add**) for each provider Hermes should call — the broker injects it per approved request; Hermes never holds the key.
* Starting through Sesame isn't one-time: launch new Hermes processes with `sesame launch -- hermes`, and if Hermes Desktop was reopened from the Dock (or anything is running unwrapped), run `sesame onboard hermes` again. `sesame doctor` verifies the machine's trust setup any time.

## Private networks (Tailscale, VPNs)

Hermes can call services that exist only inside your VPN or tailnet — an internal MCP server, a private API. What's required depends on whether Sesame holds a secret for that hostname:

* **No secret stored for the host** — traffic flows directly from the Hermes machine. Put the Hermes machine on the VPN and it works; the broker is never involved.
* **Secret stored for the host** — the **broker** makes the request so it can inject the credential, which means the broker machine must be on the VPN too. Self-hosted broker: install Tailscale on the broker host and `sudo tailscale up` — no broker restart or container changes needed. The cloud broker at getsesame.dev cannot join your private network, so credential-injected private hosts require a [self-hosted broker](/skills/self-host).
* **Serve the private host over HTTPS on port 443.** The edge proxy mediates TLS only (plain `http://` fails with a 405), and credential-injected requests are rebuilt on port 443. With Tailscale, `tailscale serve <port>` handles both — it exposes your service at `https://<machine>.<tailnet>.ts.net` with a valid certificate.

**Troubleshooting**

* `502 — Upstream request to '<host>' timed out`: the broker can't reach the host. On the broker machine, check `tailscale status` — is it connected, was the machine deleted from the tailnet, has its key expired?
* Machine joined the VPN *after* Hermes was wrapped: the running processes' proxy exclusions predate the new network. `sesame doctor` flags this; rerun `sesame onboard hermes` to restart them.
* In the Tailscale admin console, disable key expiry for server machines (broker, Hermes host) so they don't silently drop off the tailnet after \~180 days.

## Remove Sesame egress

```bash theme={null}
sesame egress uninstall
```

This preserves your Sesame login, agent registration, secrets, and policies.
