Skip to main content

Pump Up × Hermes plugin — request human approvals/elicitations and resume agent work on the decision.

Project description

Pump Up × Hermes plugin

Lets a Hermes agent request a human approval/elicitation from Pump Up and act on the human decision in its original conversation — hours later, with no inbound network access. Design: this repo's tech-docs/current/hermes-plugin.md.

It's also the first real consumer of the Pump Up Python SDK (AsyncPumpUp), so it doubles as an SDK smoke test.

How it works

  1. The agent calls pumpup_request_approval (or _elicitation). The tool resolves a Pump Up task (one per Hermes session), creates the request, writes a durable breadcrumb {request_id → session_id}, and returns {request_id, status: "pending"} immediately. The turn ends — nothing blocks (HITL takes hours; Hermes tools hard-timeout at 300s).
  2. A human decides in the Pump Up web app.
  3. The plugin's pumpup gateway platform runs a background poll loop (outbound only). For each open breadcrumb it asks Pump Up whether the request is decided.
  4. On a decision it POSTs the formatted result to the local API server (/api/sessions/{session_id}/chat), which replays the full transcript and runs a real agent turn in the origin session — so the agent continues the task it started. The breadcrumb is cleared.

Because the poll is outbound and the resume is localhost, this works for every deployment shape, including a fully NAT'd host with no inbound access (a webhook could never reach it).

Requirements

The plugin needs an always-on Hermes gateway with the API server enabled — that gateway hosts the poll loop and is the target of the resume. A purely-ephemeral CLI Hermes can't resume an hours-old conversation (no process to return to).

export API_SERVER_ENABLED=true
export API_SERVER_KEY=$(openssl rand -hex 32)   # required; the resume call authenticates with it
# optional: API_SERVER_HOST (default 127.0.0.1), API_SERVER_PORT (default 8642)

Install

From PyPI (recommended):

pip install pumpup-hermes-plugin
hermes plugins enable pumpup

Hermes auto-discovers it via the hermes_agent.plugins entry point, and pip pulls its deps (incl. pumpup-sdk). Then enable the pumpup gateway platform.

From the OSS repo (no PyPI):

hermes plugins install pumpupai/pumpup/hermes-plugin --enable

hermes plugins install accepts a subdirectory, so this works even though the plugin lives under hermes-plugin/ in the mirror.

Local development: uv sync — the Pump Up SDK resolves from the SDK repo's dev branch via [tool.uv.sources] (mise run fern:sdk:dev regenerates it); a built wheel instead depends on pumpup-sdk from PyPI, as uv strips the dev source. Then enable the pumpup gateway platform.

Config (env)

Var Required Notes
PUMPUP_BASE_URL yes Pump Up agent API base URL
PUMPUP_API_KEY yes Pump Up agent API key (read natively by the SDK)
PUMPUP_POLL_INTERVAL_SEC no Decision poll interval (default 30 — HITL is hours)
API_SERVER_KEY / API_SERVER_HOST / API_SERVER_PORT Hermes's own gateway env; reused for resume

The pumpup tools and platform self-enable when PUMPUP_BASE_URL + PUMPUP_API_KEY are present.

Tools

Tool What
pumpup_request_approval Request human sign-off; returns pending, resumes on decision
pumpup_request_elicitation Ask a human for structured fields; returns pending, resumes on answer
pumpup_record_action Record agent activity on the task timeline (attach files, patch metadata, transition)
pumpup_report_exception Report an agent error/exception
pumpup_add_note Add a freeform note
pumpup_get_decision One-shot, non-blocking check whether a request was decided
pumpup_guide Read how and when to use the Pump Up tools (also a pumpup:guide skill)

Develop

uv sync          # dev venv (pytest, ruff)
uv run pytest    # unit tests
uv run ruff check .

The contract schemas in pumpup_hermes/generated/contract_schemas.json (the Field union etc.) are a committed, generated artifact — produced from the Pump Up SDK types by the shared generator in the OpenClaw plugin (cd ../openclaw-plugin && npm run gen:schemas). One generator, two consumers; don't hand-edit. Regenerate after a contract-type change.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pumpup_hermes_plugin-0.0.8.tar.gz (45.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pumpup_hermes_plugin-0.0.8-py3-none-any.whl (24.2 kB view details)

Uploaded Python 3

File details

Details for the file pumpup_hermes_plugin-0.0.8.tar.gz.

File metadata

  • Download URL: pumpup_hermes_plugin-0.0.8.tar.gz
  • Upload date:
  • Size: 45.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pumpup_hermes_plugin-0.0.8.tar.gz
Algorithm Hash digest
SHA256 08083085974804707ff8915f8f9b3ef5867daca573c9daa46569f9b60652804f
MD5 81b1f2e083fb324725308f3d41c3c935
BLAKE2b-256 163dac2f7d1daf39fe83654f19827f04167fc1d0a22e14b86f89a860c378de3c

See more details on using hashes here.

File details

Details for the file pumpup_hermes_plugin-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: pumpup_hermes_plugin-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 24.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pumpup_hermes_plugin-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 2ff986e5d8cfd90c71a706dfe6537bce774b32e26c32d5c25ee989a298acefed
MD5 d85832cc66551373e1cfb988ac98630e
BLAKE2b-256 bf72ede2755afa09c0de5f95664979b847659eb147fde622ec687d03a0a6f046

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page