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.9.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.9-py3-none-any.whl (24.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pumpup_hermes_plugin-0.0.9.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.9.tar.gz
Algorithm Hash digest
SHA256 598598195352d21b6e3115a08a1f85b403d959d6a78606f38438b3170c49e8b5
MD5 95a536f73477ddaad36f107f44a7ddb7
BLAKE2b-256 3143d7b9bf7300d6598f567482b3ecdaf4726ce684abf14aa65f9f98e2d34f3a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pumpup_hermes_plugin-0.0.9-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.9-py3-none-any.whl
Algorithm Hash digest
SHA256 b469701b899ee67012d0d2a9c56baa14708c35edb1a70ac48fea2a6eba36444e
MD5 3d4f96944b9da019b3e0dd90790a8fec
BLAKE2b-256 44985a1a293e59e634f8504f2ba86010e57256735a31bc659041db5216bf5ce7

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