Skip to content

Releases: TheSmokeDev/hermes-talk

v0.21.1

Choose a tag to compare

@TheSmokeDev TheSmokeDev released this 26 Sep 07:48
981711b

Desktop Talk connects on a stock Hermes host, and when a request fails the panel
says why.

Fixed

  • Desktop Talk no longer fails every Connect with "Talk is temporarily
    unavailable" on a Hermes host without task context support, which is every
    released core today. It binds the conversation only when /status reports
    taskContinuity.supported, and otherwise connects the way the dashboard's
    legacy Talk does. The composer popover also stays open when the host moves
    focus back to the composer as the pointer crosses the chat; outside click and
    Escape still close it. Thanks to @HearthCore for the diagnosis and the fix.
    (#169, #170)
  • GPT-Live on Desktop still binds its own task when none is preselected, such
    as an empty conversation on the Talk-enabled build or a catalog that has not
    loaded yet. #170 inverted that start check on main, and no release carried
    it. On a host without task context the panel now refuses GPT-Live before
    connecting and names the missing host support, instead of asking for a task
    it cannot offer. (#174)

Changed

  • A refused Desktop plugin request shows its status and error code in the
    panel (Error code: 503 context_unavailable) and logs the route and code to
    the devtools console. Plugin requests travel over IPC, so the Network tab
    never shows them. The refusal's free text still stays out of both. On a host
    without task context, the recipient picker says recipients need that support
    instead of failing a refresh. docs/DESKTOP.md describes such hosts, and
    says what SSH and URL connections need: an SSH connection reaches the remote
    backend over its loopback, so Talk installed and enabled there admits it
    without TALK_DASHBOARD_TOKEN. (#174)

v0.21.0

Choose a tag to compare

@TheSmokeDev TheSmokeDev released this 17 Sep 02:42
7219f2f

Talk works on a stock Hermes Desktop, and the refusal text stops asking for an
update that does not exist.

Added

  • The Desktop composer Talk button now runs on a stock Hermes Desktop build.
    Talk reads the focused conversation from the host state, confirms its stored
    identity with a read-only title request, and attaches through the composer
    popover. Connect once the conversation has one message, because Desktop saves a
    conversation on its first message. Requests on this lane follow whichever
    profile Desktop has active, and Talk refuses a request rather than address
    another gateway once that profile moves. There is no microphone lease to share
    with Desktop dictation, and TALK_DASHBOARD_TOKEN is unsupported here; the
    panel names both when they matter. The Talk-enabled build is unchanged and
    keeps the floating window, the lease, pinned requests and empty conversations.
    (#168)

Changed

  • A host that reports only part of the Talk contract now says that, instead of
    asking for an update that no release carries. The composer popover names the
    Talk-enabled Hermes Desktop build as what the floating window needs, and
    docs/DESKTOP.md describes the two lanes side by side. (#168)

Full changelog: https://github.com/TheSmokeDev/hermes-talk/blob/main/CHANGELOG.md

Hermes Talk 0.20.2

Choose a tag to compare

@TheSmokeDev TheSmokeDev released this 16 Sep 07:56
8601800

0.20.x is the floating panel release. You can talk and type in the same conversation, address the exact Codex or Claude thread you mean, steer or cancel a running job and answer its approvals from a task card, and get spoken updates that never claim more than the transport can prove.

0.20.2 finishes the window. After you connect, the floating window shrinks to the round Talk button and expands again on hover; both are toggles under Advanced. Around the control the window is transparent and click-through, so it sits over your work instead of covering it, and you can click and drag the button to move it. A reconnect never closes a panel you pinned. hermes talk check now passes on the ChatGPT-subscription GPT-Live lane, and doctor names the live model there (#161).

For context: 0.20.0 added the panel itself, one authenticated route for typed operations, live replay, typed attach and read-only recipient history. 0.20.1 added attachments on a worker start.

The Desktop floating window needs a host side that lives in my Hermes fork and is not upstream yet.

Install:

hermes plugins install TheSmokeDev/hermes-talk --enable
pip install "hermes-talk[audio]"   # mic + speaker support; skip if dashboard-only

Upgrading: hermes plugins update hermes-talk, then restart the gateway.

Every version with its receipts: CHANGELOG.md

Signed-off-by: SmokeDev degensmoke@gmail.com

Hermes Talk 0.20.1: attachments on a worker start

Choose a tag to compare

@TheSmokeDev TheSmokeDev released this 16 Sep 02:54

Hermes Talk 0.20.1 adds attachments to a worker start.

  • Upload adapter. POST /attachments/upload is authenticated and bound to the connection, generation and input. It refuses unless the host advertises features.input_attachments (read live), enforces the host's published limits, forwards through the existing task gateway, and returns only an opaque {attachment_id, filename, content_type, bytes, sha256}. A retry replays the receipt.
  • Descriptor. textInput.attachments on /status is sourced from the same live host capability, so the panel only offers file Send where it will work.
  • Admission. /text/input takes {attachment_id, sha256} references on start_worker only, verified again at the single dispatch chokepoint against the same owner, connection, generation and input. The other operations refuse with a fixed code, matching the host's unsupported-delivery flags. Attachment sends run on the Hermes child worker.
  • Panel. A Send with files uploads first, then sends with the references frozen into the captured send. An upload failure keeps the draft and sends nothing.
  • Fixed. A browser-flow route test raced the delivery emit on slow Windows runners; it now awaits it.

Requires a host that publishes features.input_attachments (the Hermes fork's attachment ingress). On a host without it, attachments stay local and Send with files is disabled with a visible reason, as before.

Signed-off-by: SmokeDev degensmoke@gmail.com

Hermes Talk 0.20.0: the floating panel release

Choose a tag to compare

@TheSmokeDev TheSmokeDev released this 15 Sep 22:46

Hermes Talk 0.20.0 is the floating panel release: talk and type in one conversation, pick the exact Codex or Claude thread you are addressing, steer or cancel a running job and answer its approvals from a card, and get honest spoken updates that never claim more than the transport can prove.

  • Floating Talk panel in the dashboard tab and the Desktop Talk view. The runtime survives collapsing the controls and browsing other tasks. Recipient picker with exact identities, typed input with draft retention, task cards with approvals. Send with files is disabled with a visible reason until the host attachment route exists.
  • Explicit operations through one authenticated route: message to the pinned task or to the selected recipient, start a Talk-owned worker, steer, cancel, approval. Every call is bound to the connection and generation, the recipient is the store's current selection, and a repeated input returns its stored receipt rather than dispatching twice. Reply states are the honest ones; nothing retries an uncertain dispatch.
  • Live replay re-announces a finished result into the exact bound Live session, with the dispatch fence persisted before the send.
  • Typed attach and read-only recipient history: microphone-off use that mints no voice credentials; catalog, history, status and select over the host bridge. A history read never confers send.
  • Result presentation keeps six facts separate across terminal, Discord and browser: result ready, context submitted, playback started, playback finished, interrupted, unknown. /replay EVENT_ID on native terminal and Discord.
  • Desktop plug-and-play: open a conversation, Talk, Connect.
  • Outbox in WAL mode so a busy writer cannot starve reads into "storage broken".
  • Windows CI is stable: scaled waits, per-test timeouts, and the wall-clock deadline tests skipped on Windows CI only while still running on Linux and locally.

Subscription stays the default. OpenAI Realtime and GPT-Live ride the Codex login, Grok rides X Premium or SuperGrok, Gemini Live takes an API key. No new dependency.

Signed-off-by: SmokeDev degensmoke@gmail.com

Hermes Talk 0.19.2: GPT-Live subscription auth on a stock Hermes login

Choose a tag to compare

@TheSmokeDev TheSmokeDev released this 15 Sep 15:24

Hermes Talk 0.19.2 fixes GPT-Live subscription auth on a stock Hermes install.

In 0.19.1 the Codex lane borrows Hermes' own login first (#146), but that path handed back no account id, so validate_live_auth refused it and subscription mode failed unless you had also run codex login. Reported in #149.

  • The account id is read from the borrowed token's https://api.openai.com/auth → chatgpt_account_id claim, the same claim Hermes uses for its own ChatGPT-Account-Id header. expires_at now reports the token's exp.
  • The Codex CLI store path reads the same claim when auth.json carries no account_id.
  • Fail-closed behavior is unchanged: a token that names no account still cannot open subscription mode, and nothing falls through to API billing.
  • Four new tests drive the real Hermes borrow path through a stand-in hermes_cli.auth_codex; three of them fail on 0.19.1.
  • dashboard/manifest.json is bumped in step with the other two version files.

No new surface, no new dependency, no change to the API-key lanes or to Grok and Gemini.

Signed-off-by: SmokeDev degensmoke@gmail.com

Hermes Talk 0.19.1: read-only Codex subscription lane

Choose a tag to compare

@TheSmokeDev TheSmokeDev released this 15 Sep 06:41

Hermes Talk 0.19.1 makes the Codex subscription lane read-only. It never refreshes or rewrites ~/.codex/auth.json again.

  • The Codex lane now borrows Hermes' own Codex login first, through hermes_cli.auth_codex.resolve_codex_runtime_credentials. Hermes owns that token store and refreshes it under its lock, so there is one owner of the credential instead of two.
  • If Hermes has no Codex login, Talk reads ~/.codex/auth.json read-only. An expired CLI token surfaces a TalkAuthError pointing at codex login or hermes auth login openai-codex instead of a silent refresh.
  • Removed _post_token_form, _write_auth_json and _refresh_codex_credential, plus the httpx and tempfile imports they needed. 70 insertions, 205 deletions.
  • Tests rewritten to the new contract: the store is byte-identical after an expired token, and a Hermes login wins over the CLI file.

Written by @teknium1 in #146 to clear the one catalog-admission blocker on NousResearch/hermes-agent#108798. Merged as-is at 03b5cd9; all 11 checks green on that head.

No new surface, no new dependency, no behavior change for the API-key lanes or for Grok and Gemini.

Signed-off-by: SmokeDev degensmoke@gmail.com

Hermes Talk 0.19.0

Choose a tag to compare

@TheSmokeDev TheSmokeDev released this 12 Sep 10:20
ab2691c

Hermes Talk 0.19.0 keeps GPT-Live responsive while Hermes works and separates existing application conversations from new Codex workers.

  • Subscription remains the default. API billing is explicit, with separate model and voice settings and no automatic paid fallback.
  • List and select an existing Codex Desktop or Claude Code task, then send to that exact recipient. Delivery receipts distinguish queued, posted, accepted, completed, failed and unknown.
  • Start a Codex worker separately; keep talking, check its results and steer the original job through the shared coordinator.
  • Transcript capture, status and controls continue while delegation is deciding. Exact event identities, whitespace, late words and pending native capture survive reconciliation.
  • Completion updates no longer wait for unrelated transcript persistence. Requested screen inspection returns a fresh capture receipt.
  • Discord continues to check the operator and every human listener before control and private output.

Existing-task delivery requires a host with the authenticated recipient bridge in TheSmokeDev/hermes-agent#11. Worker features require the compatible host task-worker APIs. Availability is reported per execution host and application. Claude Code applies its own incoming-message approval policy; permission-bypass sessions may require approval in the existing task before posting is confirmed.

Setup: GPT-Live guide.
Existing tasks: recipient routing guide.

Native Hermes subscription support is separately submitted in NousResearch/hermes-agent#108940. That upstream PR is open for maintainer review.

Signed-off-by: SmokeDev degensmoke@gmail.com

Hermes Talk 0.18.0: GPT-Live and Codex workers

Choose a tag to compare

@TheSmokeDev TheSmokeDev released this 12 Sep 04:16
65a9739

GPT-Live voice with Hermes task continuity and Codex background workers on dashboard, terminal and Discord.

  • Subscription authentication is the default. API billing is separately selected with TALK_LIVE_AUTH=api; subscription failure never switches to a paid API key.
  • Browser WebRTC, native subscription WebRTC and native API WebSockets share one Live delegation adapter.
  • Keep talking while work runs, switch tasks and return, steer the original job, handle current approvals, cancel and inspect complete results.
  • Reconnect and audience checks preserve task ownership. Duplicate delegation events cannot launch duplicate jobs.
  • Codex workers use the installed native Codex CLI 0.154.0 executable and the configured workspace/model/approval policy.

Task workers require a compatible Hermes host containing the task-worker APIs, including the merged host change in TheSmokeDev/hermes-agent#9. A Talk plugin update alone does not add these APIs to another host build.

Install the source plugin through Hermes and install [audio,live] dependencies in the host Python environment for native audio. Configuration and operating steps: GPT-Live guide and Codex workers.

Validation: all 11 PR checks passed, including Python 3.11-3.13 on Linux and Windows, plugin scanning, dependency review and CodeQL. Final local suite: 2,266 passed, 48 skipped, 5 expected failures. Wheel and source package contain all 65 declared modules. Real connection-only checks passed for both voice billing options.

SmokeDev

v0.17.3 — stop() can no longer strand a dashboard session

Choose a tag to compare

@TheSmokeDev TheSmokeDev released this 10 Sep 04:21
082b0fc

One fix, for the dashboard tab. Ending a session could strand it: if any
teardown step threw, the rest of stop() was skipped, the UI reset to
idle, and the server kept listening, so the next session started with the
previous one still live. Every teardown step now owns its own failure and a
repeated stop() is a no-op. Found and fixed by
@JakeStevenson while building a mobile
surface on the dashboard transport, the second outside fix to a live lane.

Fixed

  • The dashboard transport's stop() is now idempotent and every teardown
    step is guarded, so a throw in one can never skip the rest. Previously a
    throw in abortCascade() (or any other step) left the channel and peer
    open — the server kept listening even though the UI reset to idle, and a
    second stop() could throw again. Each step now nulls its reference and
    swallows its own failure, so teardown always completes and a repeated
    call is a no-op. Regression test drives the real bundle through node
    with a throwing abortCascade() and asserts every wire is closed. (#130)