This project has been archived by its maintainers, and is no longer receiving any updates.
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
- 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). - A human decides in the Pump Up web app.
- The plugin's
pumpupgateway platform runs a background poll loop (outbound only). For each open breadcrumb it asks Pump Up whether the request is decided. - 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.
Metadata
Release files for pumpup-hermes-plugin 0.0.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pumpup_hermes_plugin-0.0.10.tar.gz | 45.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pumpup_hermes_plugin-0.0.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 69.7 kB
Release files / pumpup_hermes_plugin-0.0.10.tar.gz
| Download URL | pumpup_hermes_plugin-0.0.10.tar.gz |
|---|---|
| Size | 45.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
83cdef06ad07d9d13657f04dc5369adda9a1c098002a27861f59131e7e5ef2f0
|
|
BLAKE2b-256 checksum How to use checksums |
18581a857caa337ec2cde67eb6b2adbaecbd30dd7abcbb018ff3f1c72f291ceb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / pumpup_hermes_plugin-0.0.10-py3-none-any.whl
| Download URL | pumpup_hermes_plugin-0.0.10-py3-none-any.whl |
|---|---|
| Size | 24.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
10ac96ed95fd06ca54235636f08ba609b323b7c5576e0eab291c1a5ded96fc47
|
|
BLAKE2b-256 checksum How to use checksums |
836cc3f0ed47208f3b87c02392c5995eefe8b5828e26007486a7a20a98a653da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|