
~/.hermes/state.db. The OGP daemon needed to know how to inject a federated message into the right session./hooks/agent with a bearer token. The boundary is deliberately narrow — each side only knows what it needs to know.main.now.OGP doesn't need to know how OpenClaw's SQLite schema works. OpenClaw doesn't need to know how OGP's Ed25519 signatures work. They meet at the hook boundary, and the boundary is deliberately narrow.
OGP_HOME to different directories before every command.{
"version": "1.0.0",
"frameworks": [
{
"id": "openclaw",
"name": "OpenClaw",
"enabled": true,
"configDir": "/Users/me/.ogp-openclaw",
"daemonPort": 18790,
"gatewayUrl": "https://ogp.example.com",
"displayName": "Junior @ OpenClaw",
"platform": "openclaw"
},
{
"id": "hermes",
"name": "Hermes",
"enabled": true,
"configDir": "/Users/me/.ogp-hermes",
"daemonPort": 18793,
"gatewayUrl": "https://hermes.example.com",
"displayName": "Apollo @ Hermes",
"platform": "hermes"
}
],
"default": "openclaw",
"aliases": { "oc": "openclaw", "h": "hermes" }
}# Talk to OpenClaw's OGP daemon
ogp --for openclaw federation list
# Talk to Hermes's OGP daemon
ogp --for hermes federation list
# Talk to both
ogp --for all federation list
# Auto-detect if only one is running
ogp federation list--for flag replaces the OGP_HOME dance. Auto-detection checks which daemon is running on its expected port. Framework aliases let you type --for oc instead of --for openclaw./hooks/agent with a bearer token. Supports session-key forwarding when hooks.allowRequestSessionKey=true, letting OGP deliver messages to the exact Telegram session the human is active in.No vendor wants to adopt a protocol that belongs to another vendor. By making the name vendor-neutral, we made the protocol adoptable.
openclaw CLI for one, Hermes's hermes CLI for the other, and no way to see your federation state in one place.# See all peers across all frameworks
ogp --for all federation list
# Start all daemons
ogp --for all start
# Send from Hermes to a peer
ogp --for hermes federation agent general \
"Hello from Apollo"
# See which framework each peer belongs to
ogp --for all federation statuscli in the Telegram UI, not as the actual peer's name. OGP works around this by embedding the peer identity into the message body itself. The Telegram surface doesn't natively show "Apollo said..." — this is an OpenClaw/Telegram limitation, not an OGP limitation, but it's the most visible rough edge.sessionKey, but Hermes can't always honor it the way OpenClaw can. The result is slightly different delivery behavior between frameworks for the same federated message.init / twoWay / established / degraded / down / tombstoned states. The dead-daemon case still requires a process-level health check the CLI doesn't yet do automatically.OGP's multi-framework support is not a feature. It's a declaration of intent. The protocol is bigger than any single implementation.
npm install -g @dp-pcs/ogp@latest
ogp setup
ogp whoami # confirm identity & keypair
ogp start --background
ogp status # shows your gateway URLnpm install -g @dp-pcs/ogpogp setup and let it auto-detect your frameworks