Repository navigation
Releases: 100yenadmin/hermes-teammates
Release list
v0.2.6
hermes-teammates 0.2.6
You can now ask your agent to report a problem with Hermes Teammates. It uses the new teammates-report-problem skill to:
- send security problems to a private advisory and stop. These include a teammate escaping its tools or profile, access to another profile's or conversation's runs, and exposed credentials. Hermes-core problems go to Hermes's own form, and an exposed secret gets revoke-and-replace advice;
- check the roster and existing runs without starting a new run, since runs cost money;
- search existing issues and add to a matching one instead of opening a duplicate;
- draft the report with the repository's bug form headings;
- show you the exact title and text, say it will be public, and file it with
ghonly after you explicitly say yes to publishing. Withoutgh, it gives you the text to paste into the form.
On Hermes versions that don't list plugin skills in the system prompt, ask your agent to "load the skill hermes-teammates:teammates-report-problem". Hosts without plugin skills, and copies without the skills folder, load the plugin as before. Managed deployments can turn the skill off with skills.disabled and point users to their own support channel.
This release also adds a contributor guide, a bug report form, a security scope and agent guidance (#50).
The plugin's tools behave exactly as in 0.2.5. The full suite passes against Hermes main 3b63f7b and the pinned 1078a4e.
v0.2.5
hermes-teammates 0.2.5
teammate_assign can now wait for its result in the same call.
teammate_assign(wait_seconds=...)starts a teammate and waits up to 0–300 seconds for it.- If the teammate finishes in time, the reply holds its result: status, summary,
role_hashand token receipts. - If it is still running at the deadline, the reply says
timed_out: true, andteammate_waitcollects the result later. - An interrupt returns at once, without cancelling the run.
- If the teammate finishes in time, the reply holds its result: status, summary,
- The default, 0, keeps the old behavior of returning the run_id at once. An explicit
nullalso means 0. - An interrupt that races a completion is still reported (
interrupted: truebeside the result). - Use it when you need one result now. Use
teammate_waitfor several runs, or when there is other work to do meanwhile.
The full suite passes against Hermes main 3b63f7b and the pinned 1078a4e.
v0.2.4
teammate_waitaccepts waits of 0–300 seconds; the default stays 30 seconds andteammate_checkstays at 0–60 seconds (#40).- Waits return promptly on Hermes interrupts (
/stopor a new user message), withinterrupted: true,timed_out: falseand the current finished and pending runs. Ordinary replies keep their existing shape; interrupting a wait does not cancel its teammates.
v0.2.3
- Blank model, route and reasoning settings count as unset before checking their length, so long whitespace-only values no longer invalidate a teammate.
delegation_sourcesreportsmanagedfor a value set by the managed config scope (/etc/hermes orHERMES_MANAGED_DIR), including one equal to Hermes's default or also named in config.yaml, since managed values win. If that scope exists but Hermes's managed-config reader is missing or raises, merged values are reported asunknown. A malformed managed file is ignored by Hermes itself, so its values never reach the merged config and keep theirconfigordefaultsource.- Tool replies leave non-ASCII text unescaped, and the roster measures its reply budget on that same JSON form. Japanese summaries take less space and explained definitions avoid clipping caused by escape expansion.
v0.2.2 — successful teammate results stop counting as failures
hermes-teammates 0.2.2
A fix release. If you run 0.2.1 or older, upgrade.
Fixed
- Successful
teammate_checkandteammate_waitcalls are no longer counted as failed tool calls (#27).- Every finished run row carried
"error": null. Hermes's generic failure check matches the text"error"in the first 500 characters of a tool result. - As a result, every successful check or wait showed a failure marker and counted toward Hermes's repeated-failure guardrails, which can warn, halt, or block identical calls.
- Rows now leave out
errorwhen it is null. Real tool errors keep their text andok: false.
- Every finished run row carried
summary_clippedstays honest when a stop races with success (#23). It used to read false when the added "completed after stop was requested" note hid that the result had been cut.- Explaining one teammate keeps its definition (#23), even when hundreds of sibling definitions are invalid. The reply stays within its 16,000-character budget. If a definition would not fit (for example, 4,000 characters of Japanese instructions, which JSON escapes), its instructions are shortened and flagged
instructions_clipped.
Improved
teammates_roster(teammate=…)now shows Hermes's own defaults for unset delegation settings:inherit_mcp_toolsets,worktree_isolationandchild_timeout_seconds. A newdelegation_sourcesfield marks each value asconfig,defaultorunknown.
Stricter config
model, route and reasoning_effort are limited to 100 characters, and toolsets to 24 names of 1–48 printable ASCII characters. A longer value makes that teammate invalid, with a clear config error in /teammates. Real configurations are far below these limits.
Known limit
A reply that lists a run whose status is failed near its start is still flagged by Hermes's string check, because failed is the true status. The root cause is upstream: NousResearch/hermes-agent#91166.
Upgrade
hermes plugins install 100yenadmin/hermes-teammates --ref v0.2.2 --force --enableThen restart the gateway, or start a new CLI session. The ledger migrates itself to schema 4; older rows keep working.
v0.2.1 — honest receipts
Hermes Teammates gives your agent reusable specialists you define once. 0.2.1 makes each run's receipt complete: what the run cost, which version of the role it ran, and whether its result was cut. The roster also stops overstating what your Hermes build can do.
What's new
- Token receipts. Every run records its child's input, output, cache-read, cache-write and reasoning tokens.
- They come from Hermes'
subagent_startandpost_api_requesthooks, and only that child's session counts. - Cost isn't included: Hermes doesn't give plugins a cost figure.
- The roster prints
token_receipts=yes|no.
- They come from Hermes'
- Clipped results are marked.
summary_clippedand the originalsummary_charsshow when a summary was cut. - Role revision receipt. Each run stores the
role_hashof the teammate definition it used, and the roster shows each teammate's current hash. - Explain a teammate.
teammates_roster(teammate="reviewer")shows:- the parsed definition and launch toolsets;
- the global
delegationsettings that reach it (MCP inheritance, worktree isolation, child timeout), read-only; - the fields this build ignores.
- Smaller fan-in replies.
teammate_waitleaves out each run's goal and shares one summary budget across the runs it returns. teammate_waitkeeps its deadline, even while a Kanban handoff is retrying. The monitor andteammate_checkstill do the handoff.- An honest roster.
- Completion notices read
unsupportedon every current Hermes build. They used to readoff, as if the setting could turn them on. follow_upreadsdigest(the plugin's own follow-up, which works everywhere) ornative.
- Completion notices read
Compatibility
- The ledger upgrades in place: new nullable columns, and older rows report unknown values as null. No config changes.
- Works on Hermes 0.21.4+. Token receipts need in-process plugins and a build with both hooks.
- 286 tests pass on the pinned Hermes tree and on Hermes main. One test runs a real Hermes child and checks that its token totals reach the ledger.
Full changelog: https://github.com/100yenadmin/hermes-teammates/blob/main/CHANGELOG.md
v0.2.0 — teammate_wait
Hermes Teammates gives your agent reusable specialists you define once (a reviewer, a scout, a test-writer). Their results are kept, and a Kanban handoff is optional. 0.2.0 makes fan-in a single call.
What's new
teammate_wait: waits for any or all of up to 16 runs in one call and returns as soon as that happens (at most 60 s). It returns the finished results plus the runs still pending. Fan-in that took oneteammate_checkper run now takes one call.- Steering is reported honestly. The roster shows steering as
lifecycle,delegate_taskorno. Before, it saidnoon builds where thedelegate_taskfallback steers fine (#18). - Fixes
- Benchmarks: the README has a new section with the first live slice. All three setups found every planted bug, so that task can't rank them on quality. Teammates did not use fewer tokens than core
delegate_task; the next slice re-measures withteammate_wait.
Not active yet: completion notices
The code for "your teammate finished" notices is built and tested, but it never sends on current Hermes. Hermes can't yet confirm which conversation would receive the message:
- the CLI ignores the session key;
- the gateway keeps the key across
/new.
Rather than risk a notice in the wrong conversation, the roster reports notices as unsupported. Use teammate_wait. Session-bound injection is requested upstream in NousResearch/hermes-agent#133212.
Compatibility
- No config changes.
- Works on Hermes 0.21.4+.
- Per-teammate
routeand lifecyclesteerneed a Hermes build with NousResearch/hermes-agent#137167 (main or canary). - 256 tests pass on both the pinned and main Hermes trees.
Full changelog: https://github.com/100yenadmin/hermes-teammates/blob/main/CHANGELOG.md
v0.1.4
Teammate results no longer get lost, and you can now see which runs are waiting and what each one cost.
What changed
- Results are saved without a check. A plain run now saves its result to the ledger as soon as the child finishes. Before, a run nobody checked within an hour lost its result when Hermes dropped the finished child (fixes #6).
- Waiting runs show as
queued. Checks and the roster show children that have not started yet asqueued. They still count toward the live-run cap (fixes #8). - Receipts. Finished runs record
api_callsandduration_secondswhen Hermes reports them; any other value is stored as null. Existing ledgers upgrade in place (fixes #9). - Steering proven on a real lifecycle. The test suite now steers real lifecycle children through both the older
delegate_taskfallback and lifecyclesteer, on pinned Hermes and on current main (fixes #11). - Robustness. Each monitor removes itself from the registry when it exits. If the status probe fails, the run shows as
runninginstead of an error.
Compatibility
There are no config changes. Per-teammate route and lifecycle steer still need a Hermes build that includes NousResearch/hermes-agent#137167 (current main or canary). Per-teammate reasoning effort still waits on NousResearch/hermes-agent#89936.
Tests
183 tests pass against both the pinned Hermes and current Hermes main. Every fix has a test that failed before the change.
Full changelog: https://github.com/100yenadmin/hermes-teammates/blob/main/CHANGELOG.md
v0.1.3
- On Hermes builds with NousResearch/hermes-agent#137167, a teammate's
routeselects its provider for that run;
verified live with two routes on real GLM endpoints. A routed teammate does not use thedelegation:provider
settings (provider, model, base URL, API mode), so setmodelwithroute; the globaldelegation.reasoning_effortstill applies. - The
plugins.isolation: hostrefusal now names what still blocks it: calls made after a tool returns cannot
resolve their parent session, and the plugin cannot see the delegation depth or spawn pause from the host process. - Handles and cancel results that arrive as plugin-host wire records (mappings with attribute access but no
to_dict()) are stored and read correctly. - The plugin-toolset hint now says that only Hermes builds before NousResearch/hermes-agent#137167 refuse plugin toolsets.
Install or update: hermes plugins install 100yenadmin/hermes-teammates --enable, then restart the gateway or CLI session.
Tested: 141 tests pass on a pinned Hermes (1078a4e5f3) and on Hermes main (3b63f7b0a4). The route was tested live on Hermes main with real GLM endpoints (details in #4).
v0.1.2: correctness release
- Delegated children cannot launch nested teammates.
- Invalid teammate fields and toolsets refuse launch and appear separately in the roster; clipping only warns.
- Blank model, route and reasoning settings count as unset; each config error is warned once.
- Launch context keeps operator instructions first, then the card, earlier results and caller context, within 30,000 characters.
- Follow-up digests keep the result tail even when an earlier goal is long.
- Accepted stops are saved once in the ledger; only completions at or after the stop stay cancelled and block their card. A refused cancellation never changes a run's outcome and clears only the intent it recorded, so an earlier accepted stop stands.
- Existing ledgers upgrade in place and use an index for live-run lookups.
- Kanban monitors send worker heartbeats so long runs are not reclaimed as stale.
- Monitors retry transient errors with bounded backoff, stopping after ten consecutive failures.
- Unavailable results block their Kanban cards instead of leaving them running.
- Failed assignments cancel launched children and block claimed cards.
- Feature checks tolerate missing host-isolated methods, keeping the roster available.
- First use reconciles unfinished runs left by dead processes, across conversations. Same-process plugin reloads keep live runs and their results; each conversation resolves its own runs.
- Steering reports plugin guidance to check results, instead of promising completion messages.
- Launch errors explain why current Hermes cannot grant plugin toolsets to teammates.
routenow reaches Hermes builds whose lifecycle API hasSubagentLaunchRequest.provider(upstream draft PR
#133762): a teammate withroute: openrouterruns on that configured provider. Older builds still listroute
underunsupported.
Tests: 130 pass against Hermes main and a pinned build, stubbed children; every fix has a regression test that failed first.
Upgrade: the ledger migrates in place from 0.1.1. requires_hermes is unchanged (>=0.21.4).