Skip to main content

Route Hermes delegate_task(background=True) to named, persistent AgentMint subagents.

Project description

agentmint-hermes-runner

Python adapter that bridges Hermes' delegate_task(background=True) to named, persistent AgentMint subagents — specialists that accumulate /workspace/MEMORY.md across calls. Two setup paths; combine freely:

Mode What it does Best for
Persistent delegate_task(background=True) routes to a pre-minted named subagent (via default_agent_name, or via an agentmint-<name> entry the LLM passes in toolsets). Its /workspace/MEMORY.md accumulates across calls. One long-running specialist that learns OR LLM picking among many specialists per call (via toolset hack — see below)
Plugin tool Hermes auto-discovers a new agentmint_delegate(agent_name, goal, ...) tool from this package's entry-point. LLM picks the subagent per call. Cleaner per-call routing when you can expose a new tool to the LLM

The Hermes-installable skill that drives this adapter lives in a separate catalog repo: mesutcelik/agentmint-skillshermes skills install mesutcelik/agentmint-skills/hermes-delegate-task. The skill references this package by its PyPI name (pip install agentmint-hermes-runner).

Status

v0.7.0 — alpha. Stateless mode was removed (it didn't carry its weight; persistent specialists are AgentMint's actual value prop). Auth backends: BearerAuth (Stripe-Link), TempoAuth (Tempo USDC.e — Tier 1 direct only; the delegate_task patches require Bearer). Requires AgentMint API ≥ 0.7.0.

Setup — persistent (default routing)

Every delegate_task(background=True) lands in one named subagent:

import os
from agentmint_hermes_runner import AgentMintDispatcher, BearerAuth, install_delegate_task_wrapper

dispatcher = AgentMintDispatcher(auth=BearerAuth(jwt=os.environ["AGENTMINT_JWT"]))
install_delegate_task_wrapper(dispatcher, default_agent_name="default-worker")

Pre-mint default-worker once (agent.create via curl). Its MEMORY.md grows across every delegation.

Setup — persistent (per-call routing via toolset hack)

When the LLM should pick a specialist per call, but you don't want to expose a new tool, encode the target name in toolsets:

# Operator wires the adapter the same way — default_agent_name is optional:
install_delegate_task_wrapper(dispatcher, default_agent_name="default-worker")

# The LLM then dispatches like this:
delegate_task(
    background=True,
    goal="Review the diff",
    toolsets=["terminal", "file", "agentmint-pr-reviewer-myrepo"],
)

The adapter parses agentmint-pr-reviewer-myrepo from toolsets, routes to that subagent (overriding default_agent_name), and strips the entry from the toolset list before composing the prompt.

This is a workaround for Hermes' delegate_task not accepting a dispatcher-target argument. A formal proposal is in docs/hermes-feature-request.md — when an upstream extension lands, this hack will be deprecated.

Setup — plugin tool (named fleet, cleanest)

from agentmint_hermes_runner import AgentMintDispatcher, BearerAuth, set_dispatcher

dispatcher = AgentMintDispatcher(auth=BearerAuth(jwt=os.environ["AGENTMINT_JWT"]))
set_dispatcher(dispatcher)   # registers agentmint_delegate via the entry-point

Hermes' plugin discovery (hermes_agent.plugins entry-point) auto-registers agentmint_delegate when this package is pip-installed. The LLM can now call:

agentmint_delegate(agent_name="reviewer-myrepo", goal="Review the diff", async_=True)
agentmint_delegate(agent_name="support-acme",    goal="Reply to ticket #42", async_=True)

Combine with install_delegate_task_wrapper(dispatcher, default_agent_name=...) if you want BOTH delegate_task and agentmint_delegate to dispatch to AgentMint.

See examples/persistent.py and examples/plugin.py for complete operator setup snippets.

Install

pip install agentmint-hermes-runner

Test

pip install -e ".[dev]"
pytest
ruff check .

Lower-level surface

If you want to drive AgentMint directly without the delegate_task patch or the plugin tool:

result = dispatcher.dispatch(
    agent_name="reviewer-myrepo",
    goal="Review the diff and flag risks.",
    context="Project at /workspace, Python 3.11, uses Flask + PyJWT.",
    toolsets=["terminal", "file"],     # "web" raises UnsupportedToolset
    role="leaf",                        # or "orchestrator"
    max_iterations=50,
    child_timeout_seconds=600,
)

# Batch dispatch (Hermes tasks=[…] analog):
results = dispatcher.dispatch_batch(
    tasks=[
        Task(agent_name="researcher-wasm", goal="WASM 2026 survey"),
        Task(agent_name="researcher-riscv", goal="RISC-V 2026 survey"),
    ],
    max_concurrent_children=3,
    child_timeout_seconds=900,
)

Known unsupported

  • toolsets=["web"] — no canonical AgentMint web-fetch skill yet. Raises UnsupportedToolset.
  • max_spawn_depth — AgentMint sandboxes aren't structurally bounded by depth.
  • Tempo + the delegate_task patches — polling against agent.run.status is Bearer-only. Tempo customers can use Tier 1 (direct curl) but not the install/plugin paths above.

License

MIT

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

agentmint_hermes_runner-0.7.0.tar.gz (25.5 kB view details)

Uploaded Source

Built Distribution

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

agentmint_hermes_runner-0.7.0-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

Details for the file agentmint_hermes_runner-0.7.0.tar.gz.

File metadata

  • Download URL: agentmint_hermes_runner-0.7.0.tar.gz
  • Upload date:
  • Size: 25.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agentmint_hermes_runner-0.7.0.tar.gz
Algorithm Hash digest
SHA256 9062a047a19f3d959c28a170f6aeabf40b1aeb90b1b5fb16158dfab3c6aa5310
MD5 c0dc9f16922f10ad48e2207b9b00850e
BLAKE2b-256 94d84c1d31d1ab62fc2034b5b340ab84478d9620f6b454b3587f349688b571ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for agentmint_hermes_runner-0.7.0.tar.gz:

Publisher: release.yml on mesutcelik/agentmint-hermes

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agentmint_hermes_runner-0.7.0-py3-none-any.whl.

File metadata

File hashes

Hashes for agentmint_hermes_runner-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 efb7670598c2d32df134f41fb9df10b756521ea685998790e5888530d91f8c59
MD5 19731c84e1d34771bcc5094b77e7848e
BLAKE2b-256 cb3af3d92a4c0b74705208b4a2a8de8992ce4ee5ee45b9661a35398f61876537

See more details on using hashes here.

Provenance

The following attestation bundles were made for agentmint_hermes_runner-0.7.0-py3-none-any.whl:

Publisher: release.yml on mesutcelik/agentmint-hermes

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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