Skip to content

Releases: 100yenadmin/hermes-teammates

v0.2.6

Choose a tag to compare

@100yenadmin 100yenadmin released this 14 Oct 18:28
0fc8ff4

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 gh only after you explicitly say yes to publishing. Without gh, 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

Choose a tag to compare

@100yenadmin 100yenadmin released this 14 Oct 12:10
29d6b46

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_hash and token receipts.
    • If it is still running at the deadline, the reply says timed_out: true, and teammate_wait collects the result later.
    • An interrupt returns at once, without cancelling the run.
  • The default, 0, keeps the old behavior of returning the run_id at once. An explicit null also means 0.
  • An interrupt that races a completion is still reported (interrupted: true beside the result).
  • Use it when you need one result now. Use teammate_wait for 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

Choose a tag to compare

@100yenadmin 100yenadmin released this 14 Oct 10:06
cc8f205
  • teammate_wait accepts waits of 0–300 seconds; the default stays 30 seconds and teammate_check stays at 0–60 seconds (#40).
  • Waits return promptly on Hermes interrupts (/stop or a new user message), with interrupted: true, timed_out: false and the current finished and pending runs. Ordinary replies keep their existing shape; interrupting a wait does not cancel its teammates.

v0.2.3

Choose a tag to compare

@100yenadmin 100yenadmin released this 14 Oct 07:58
122a7fe
  • Blank model, route and reasoning settings count as unset before checking their length, so long whitespace-only values no longer invalidate a teammate.
  • delegation_sources reports managed for a value set by the managed config scope (/etc/hermes or HERMES_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 as unknown. A malformed managed file is ignored by Hermes itself, so its values never reach the merged config and keep their config or default source.
  • 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

Choose a tag to compare

@100yenadmin 100yenadmin released this 14 Oct 00:17
eb63e9d

hermes-teammates 0.2.2

A fix release. If you run 0.2.1 or older, upgrade.

Fixed

  • Successful teammate_check and teammate_wait calls 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 error when it is null. Real tool errors keep their text and ok: false.
  • summary_clipped stays 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_isolation and child_timeout_seconds. A new delegation_sources field marks each value as config, default or unknown.

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 --enable

Then 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

Choose a tag to compare

@100yenadmin 100yenadmin released this 13 Oct 20:16
5f4f72e

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_start and post_api_request hooks, 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.
  • Clipped results are marked. summary_clipped and the original summary_chars show when a summary was cut.
  • Role revision receipt. Each run stores the role_hash of 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 delegation settings that reach it (MCP inheritance, worktree isolation, child timeout), read-only;
    • the fields this build ignores.
  • Smaller fan-in replies. teammate_wait leaves out each run's goal and shares one summary budget across the runs it returns.
  • teammate_wait keeps its deadline, even while a Kanban handoff is retrying. The monitor and teammate_check still do the handoff.
  • An honest roster.
    • Completion notices read unsupported on every current Hermes build. They used to read off, as if the setting could turn them on.
    • follow_up reads digest (the plugin's own follow-up, which works everywhere) or native.

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

Choose a tag to compare

@100yenadmin 100yenadmin released this 13 Oct 19:35
62772cb

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 one teammate_check per run now takes one call.
  • Steering is reported honestly. The roster shows steering as lifecycle, delegate_task or no. Before, it said no on builds where the delegate_task fallback steers fine (#18).
  • Fixes
    • Concurrent assignments in one conversation respect its live-run limit (#13). If two processes ever share a conversation, the ledger rejects the extra run and its child is cancelled (#20 tracks reservations).
    • Out-of-range receipt values are stored as null (#17).
  • 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 with teammate_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 route and lifecycle steer need 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

Choose a tag to compare

@100yenadmin 100yenadmin released this 13 Oct 16:47
38b398e

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 as queued. They still count toward the live-run cap (fixes #8).
  • Receipts. Finished runs record api_calls and duration_seconds when 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_task fallback and lifecycle steer, 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 running instead 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

Choose a tag to compare

@100yenadmin 100yenadmin released this 13 Oct 01:13
dc0aad6
  • On Hermes builds with NousResearch/hermes-agent#137167, a teammate's route selects its provider for that run;
    verified live with two routes on real GLM endpoints. A routed teammate does not use the delegation: provider
    settings (provider, model, base URL, API mode), so set model with route; the global delegation.reasoning_effort still applies.
  • The plugins.isolation: host refusal 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

Choose a tag to compare

@100yenadmin 100yenadmin released this 11 Oct 08:27
5c6f9cd
  • 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.
  • route now reaches Hermes builds whose lifecycle API has SubagentLaunchRequest.provider (upstream draft PR
    #133762): a teammate with route: openrouter runs on that configured provider. Older builds still list route
    under unsupported.

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).