Skip to content

borgmcp 5.7.0

Choose a tag to compare

@TheodorStorm TheodorStorm released this 28 Sep 11:24
· 140 commits to main since this release
e322e2c

borgmcp 5.7.0

  • Adds a Borg-owned Hermes user plugin, borg-representative-push, and borg representative hermes-plugin install [--hermes-home <path>] [--force] to place it.
    • The command copies exactly the plugin's two files into <Hermes home>/plugins/borg-representative-push/ and prints the configuration to add.
    • It refuses to replace an existing install without --force, refuses a symbolic-link target and a missing Hermes home, never edits Hermes config and never starts or restarts Hermes.
  • When the bound Coordinator replies, the plugin wakes the one Hermes conversation named by its session_key setting.
    • It supervises borg representative listen inside the Hermes messaging gateway only. The listener starts when that platform connects and never in the CLI, Desktop or worker processes.
    • Only a messaging-gateway conversation (Telegram, Discord, Slack and the other gateway platforms) can be woken. A Hermes Desktop chat cannot be woken: Hermes injects plugin messages only into gateway conversations.
    • The injected message is one fixed text that tells the conversation to call read, persist and relay, then deliver. No message body, sender or document passes through the plugin.
    • Gateway injection requires the Hermes permission allow_gateway_injection: true for the plugin.
  • Only one process may use the representative tools. The woken conversation runs in the gateway, so the gateway must own the tools lease. The guide shows how to scope it: a lazy MCP entry, and the mcp-borg-representative toolset disabled on every other platform, Desktop and CLI included.
  • Each undelivered reply wakes the conversation at most 1 + max_reinjects times (defaults: reinject_after_s 600, max_reinjects 3).
    • Every wake is counted in the plugin's state before Hermes is asked to start the turn, so a replayed hint or a gateway restart does not renew the count. A refused wake's reservation is rolled back when the state update succeeds; if that rollback fails, the wake is conservatively counted as spent.
    • A record is removed only when an observed borg_representative-deliver covers that reply.
    • A terminal listener stop (a binding refusal, or eviction, rebind, revocation or trust change) ends every wake, including queued and repeat wakes, until the gateway restarts.
  • Wakes fail closed on a state write error. If the wake count cannot be written, the plugin does not wake the conversation and logs why.
  • Plugin state lives in <Hermes home>/plugin-data/borg-representative-push/.
    • The plugin refuses that directory if it is a symbolic link and sets it to mode 0700.
    • Its files are created with mode 0600, and it never reads or writes through a symbolic link planted there.