Files
hermes-identity-plugin/README.md
Hermes 514706bcce feat: runtime monkey-patch instead of file patching — zero fork required
The plugin now monkey-patches HonchoMemoryProvider._do_session_init at
plugin load time instead of requiring changes to any file in the Hermes
repo. This means:

- No modifications to plugins/memory/honcho/__init__.py or any other file
- No fork needed — pure plugin approach
- Survives Hermes upgrades without merge conflicts
- Removed docs/honcho-injector.md (replaced by docs/how-it-works.md)
- Updated README with new architecture description

Config file at /opt/data/identity-config.json remains the single source
of truth for mappings.
2026-05-24 16:07:02 -04:00

4.5 KiB

Hermes Identity Plugin

Maps platform-specific user IDs (Discord snowflake, Telegram UID, terminal session) and kanban boards to stable Honcho peer names. Eliminates user-default-t_* peers from kanban workers and unifies a user's identity across platforms.

Zero modifications to the Hermes repo. No fork required. The plugin uses runtime monkey-patching at plugin load time to wrap Honcho's session initialization — no files are changed on disk.

Architecture

                    ┌──────────────────────────┐
                    │ identity-config.json      │
                    │ /opt/data/                │
                    └──────┬───────────────────┘
                           │ reads on every resolve
        ┌──────────────────┼───────────────────────┐
        │                  │                       │
        ▼                  ▼                       ▼
 ┌──────────────┐  ┌──────────────┐  ┌──────────────────────┐
 │ pre_gateway  │  │  /identity   │  │  Honcho monkey-patch  │
 │ dispatch     │  │  slash cmd   │  │  (runtime, no files)  │
 │ hook (log)   │  │  (manage)    │  └──────────┬───────────┘
 └──────────────┘  └──────────────┘             │
                                        injects peer_name
                                        into kwargs["user_id"]
                                        BEFORE Honcho session init

How it works

  1. Plugin loadsregister() is called → monkey-patches HonchoMemoryProvider._do_session_init with a wrapper.

  2. Kanban worker starts → Honcho tries to init → no user_id from gateway → the wrapper calls get_peer_name() → reads the task body from HERMES_KANBAN_DB → extracts context_peer: <name> → injects it as user_id → Honcho creates the session with the correct peer.

  3. Gateway session starts (Discord/Telegram) → normal flow with platform user ID → monkey-patch is bypassed (user_id already set).

  4. Missing config or env → returns None → Honcho behaves exactly as before (creates user-default-* peers — safe fallback).

Installation

# 1. Install the plugin from Gitea
hermes plugins install ssh://git@code.lazyworkhorse.net:2222/Hermes/hermes-identity-plugin.git

# 2. Create the config file (persistent volume)
cp config.sample.json /opt/data/identity-config.json

# 3. Edit /opt/data/identity-config.json with your mappings
# 4. Restart gateways to pick up the plugin

Config file: /opt/data/identity-config.json

{
  "mappings": [
    {"platform": "discord", "id": "479136126737711105", "peer": "thierry"},
    {"platform": "telegram", "id": "123456789", "peer": "thierry"},
    {"platform": "matrix", "id": "@thierry:example.org", "peer": "thierry"},
    {"platform": "terminal", "id": "default", "peer": "thierry"}
  ],
  "boards": {
    "default": "thierry",
    "catherine": "catherine"
  },
  "fallback_peer": "user",
  "enforce_context_peer": true
}

Task body convention

Every kanban task SHOULD include a context_peer in its body:

Do research on Postgres migration costs.

```metadata
context_peer: thierry

Profiles (Claire, Ashley, Finn, Matt) set this when calling `kanban_create`.

**If `context_peer` is missing**, the plugin falls back to the board
config (e.g., `boards.default` → `thierry`). If no board config either,
it uses `fallback_peer`. If that's also unset → `user-default-*` (safe).

## Commands

- `/identity status` — show current config and resolved peer
- `/identity list` — list all mappings
- `/identity add discord <id> <peer>` — add a new mapping
- `/identity rm <index>` — remove mapping by index
- `/identity board <slug> <peer>` — set board's default peer
- `/identity help` — full help

## Safety

- The monkey-patch is applied ONLY at plugin load time, before any session.
- If the plugin is uninstalled or fails to load, Honcho is untouched.
- If the config file is missing, all resolution returns None → Honcho
  creates `user-default-*` as today.
- No data loss risk. No changes to any file in the Hermes repo.