128 lines
5.5 KiB
Markdown
128 lines
5.5 KiB
Markdown
# Hermes Agent × Matrix
|
||||
|
|
|
|||
|
|
Operational notes for the Hermes Agent Matrix channel hosted on `mx2.windy.me`.
|
|||
|
|
This document deliberately contains no Matrix passwords, access tokens, recovery
|
|||
|
|
keys, or room encryption material.
|
|||
|
|
|
|||
|
|
## Deployment
|
|||
|
|
|
|||
|
|
| Item | Value |
|
|||
|
|
|---|---|
|
|||
|
|
| Hermes host | `mx2.windy.me` |
|
|||
|
|
| Hermes profile | `assistant` |
|
|||
|
|
| Profile directory | `/home/windy/.hermes/profiles/assistant` |
|
|||
|
|
| User service | `hermes-gateway-assistant` |
|
|||
|
|
| Matrix homeserver | `https://synapse.chans.xyz` |
|
|||
|
|
| Matrix identity domain | `chans.xyz` |
|
|||
|
|
| Authentication | MAS local-password account, then Matrix client access token |
|
|||
|
|
| Reconfiguration helper | `/home/windy/.hermes/scripts/reconfigure-hermes-matrix.sh` |
|
|||
|
|
|
|||
|
|
The gateway is started as the `windy` user with:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
systemctl --user status hermes-gateway-assistant
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Configuration contract
|
|||
|
|
|
|||
|
|
The Matrix channel's secret and runtime settings are in the assistant profile's
|
|||
|
|
`.env`; non-secret channel policy is in `config.yaml`.
|
|||
|
|
|
|||
|
|
| Environment key | Purpose |
|
|||
|
|
|---|---|
|
|||
|
|
| `MATRIX_HOMESERVER` | Client-server base URL |
|
|||
|
|
| `MATRIX_ACCESS_TOKEN` | Hermes account's current client access token |
|
|||
|
|
| `MATRIX_USER_ID` | Hermes Matrix user ID |
|
|||
|
|
| `MATRIX_DEVICE_ID` | Device returned by `/account/whoami` |
|
|||
|
|
| `MATRIX_ENCRYPTION` | E2EE setting (currently expected to be `true`) |
|
|||
|
|
| `MATRIX_RECOVERY_KEY` | E2EE recovery material; keep secret |
|
|||
|
|
| `MATRIX_HOME_ROOM` | Primary Hermes room ID |
|
|||
|
|
| `MATRIX_ALLOWED_ROOMS` | Room allow-list |
|
|||
|
|
| `MATRIX_ALLOWED_USERS` | Optional sender allow-list |
|
|||
|
|
|
|||
|
|
`config.yaml` must agree with the environment for `matrix.allowed_rooms`. The
|
|||
|
|
gateway policy currently requires a mention unless a room is explicitly listed
|
|||
|
|
in `free_response_rooms`.
|
|||
|
|
|
|||
|
|
## Reinstall consequence and current finding
|
|||
|
|
|
|||
|
|
The Matrix deployment on `synapse.chans.xyz` is a new homeserver instance, not a
|
|||
|
|
recovery of the previous database. Therefore old Matrix users, rooms, devices,
|
|||
|
|
access tokens, and E2EE state cannot be reused.
|
|||
|
|
|
|||
|
|
During the 2026-08-03 check:
|
|||
|
|
|
|||
|
|
- the new client API at `https://synapse.chans.xyz/_matrix/client/versions`
|
|||
|
|
responded successfully;
|
|||
|
|
- Hermes's existing Matrix access token returned HTTP `401 M_UNKNOWN_TOKEN`;
|
|||
|
|
- the old configured room ID was still an old `:chans.xyz` room and must be
|
|||
|
|
replaced with a room created on the new instance.
|
|||
|
|
|
|||
|
|
## Safe reconfiguration procedure
|
|||
|
|
|
|||
|
|
1. Use MAS / Element Admin to create or reset the dedicated Hermes account
|
|||
|
|
(normally `@hermes:chans.xyz`). Public registration is disabled.
|
|||
|
|
2. Sign in as that account via a Matrix client or the client login API and obtain
|
|||
|
|
a new access token. Keep it only on `mx2` in the assistant profile `.env`.
|
|||
|
|
3. Create a new private encrypted room on the new homeserver, invite the intended
|
|||
|
|
human users, and copy its room ID. Do not reuse the old room ID.
|
|||
|
|
4. Keep the current SSH session open and run the helper from `mx2`, supplying the
|
|||
|
|
new token and room ID only through its environment (not shell history or this
|
|||
|
|
repository):
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
MATRIX_ACCESS_TOKEN='...' \
|
|||
|
|
MATRIX_ROOM_ID='!...:chans.xyz' \
|
|||
|
|
/home/windy/.hermes/scripts/reconfigure-hermes-matrix.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
It validates the token with `/account/whoami`, checks that it resolves to the
|
|||
|
|
expected Hermes user, updates the Matrix environment and allow-list, stops the
|
|||
|
|
gateway, moves the previous E2EE store to a timestamped backup directory, and
|
|||
|
|
restarts the gateway.
|
|||
|
|
|
|||
|
|
5. Verify the service and send an `@hermes` mention in the new room. Inspect only
|
|||
|
|
recent service logs; do not paste them into Git because they may contain user
|
|||
|
|
content or identifiers:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
systemctl --user is-active hermes-gateway-assistant
|
|||
|
|
journalctl --user -u hermes-gateway-assistant --since '5 minutes ago' --no-pager
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
If validation fails, the helper exits before changing the profile or restarting
|
|||
|
|
the service. The prior E2EE store is intentionally preserved rather than deleted.
|
|||
|
|
|
|||
|
|
## 2026-08-03 reconfiguration record
|
|||
|
|
|
|||
|
|
The Matrix server was reinstalled as a new instance, so the Hermes account needed
|
|||
|
|
a newly issued client token and a newly created room. The reconfiguration was
|
|||
|
|
performed with the helper above and completed successfully.
|
|||
|
|
|
|||
|
|
Verified post-change:
|
|||
|
|
|
|||
|
|
- `hermes-gateway-assistant` is `active` on `mx2.windy.me`;
|
|||
|
|
- the stored token authenticates as `@hermes:chans.xyz` and matches the stored
|
|||
|
|
device ID;
|
|||
|
|
- the new primary room is present in `MATRIX_HOME_ROOM` and
|
|||
|
|
`MATRIX_ALLOWED_ROOMS` (the room ID stays in the private host profile rather
|
|||
|
|
than this repository);
|
|||
|
|
- the Hermes account is joined to that room;
|
|||
|
|
- the prior Matrix E2EE store was moved to a timestamped backup directory below
|
|||
|
|
`/home/windy/.hermes/profiles/assistant/platforms/matrix/` before restart.
|
|||
|
|
|
|||
|
|
The final functional check is to send an `@hermes` mention from an allowed
|
|||
|
|
member in the new room and confirm the gateway replies. Rotate the token after
|
|||
|
|
any accidental disclosure, then repeat the helper procedure with the replacement
|
|||
|
|
token.
|
|||
|
|
|
|||
|
|
## References
|
|||
|
|
|
|||
|
|
- Matrix host facts: [`hosts/synapse.chans.xyz.md`](../hosts/synapse.chans.xyz.md)
|
|||
|
|
- Matrix deployment and upstream index: [`matrix-upstream.md`](matrix-upstream.md)
|
|||
|
|
- Matrix health checks: [`runbooks/matrix-health.md`](../runbooks/matrix-health.md)
|
|||
|
|
- [Matrix Client-Server API: account whoami](https://spec.matrix.org/latest/client-server-api/#get_matrixclientv3accountwhoami)
|
|||
|
|
- [Matrix Client-Server API: login](https://spec.matrix.org/latest/client-server-api/#post_matrixclientv3login)
|
|||
|
|
- [Matrix room creation API](https://spec.matrix.org/latest/client-server-api/#post_matrixclientv3createroom)
|
|||
|
|
- [Element Server Suite documentation](https://element-hq.github.io/ess-helm/)
|