Remote Helper & HermesCLI Binaries

Besides the agent itself, your Athena server hosts two smaller components that agents download from it: the Remote Helper, which powers WebRTC technician screen-share on Windows, and HermesCLI, the local agent command-line tool. You upload one build of each per operating system, the server hashes and signs it with your own certificate authority, and agents pull it over the connection they already hold. Nothing is fetched from the internet. This page covers the Settings screens, the one-build-per-OS rule, how agents pick builds up, and the REST API and PowerShell cmdlets.

Both are separate from the agent binary and are versioned on their own. You can refresh the screen-share helper or HermesCLI without publishing or pushing a new agent build. To manage the agent itself, see Agent Binaries & Updates.

Where to manage them#

Open Settings → Agents → Updates. The Updates sub-tab is split into five views, shown as a strip of buttons along the top: Rollout & auto-update, Agent binaries, Push & history, Remote Helper and HermesCLI. The view you pick is kept in the page address (?view= on /settings/agent/updates), so you can bookmark or share a link to one view, and the browser's Back button works. The last two views are covered here.

ViewSection titleOperating systemsWhat agents do with it
Remote Helper (?view=helper)Remote Helper BinariesWindows, LinuxThe screen-share helper (Hermes.RemoteHelper). The Windows agent pulls it when it starts, once it reaches a server.
HermesCLI (?view=cli)HermesCLI BinariesWindows, Linux, macOSThe local agent CLI, including its code-gated uninstall command. Windows, Linux and macOS agents pull it every time they connect and place it next to the agent.

You only see these two views' contents if you hold the binaries.manage permission (see Permissions). Without it the section is empty.

The per-OS table#

Each view shows one row per operating system. It is not a version history, because the server keeps only one build per OS (see below). A row with nothing stored reads Not uploaded. Otherwise it shows:

ColumnMeaning
Operating SystemWindows, Linux or (HermesCLI only) macOS.
VersionThe version string you entered at upload.
SizeFile size.
SHA-256The first 12 characters of the hash the server calculated. Hover over it to see the full value.
By / AtWho uploaded the build and when (yyyy/MM/dd HH:mm).
SignedA check mark (tooltip Signed with server CA key) when the build carries your server's signature. A dash (Not signed) only appears for a legacy build that was stored before signing existed.
ActionsOne upload button. Its tooltip reads Upload a build for <OS> (replaces the current one).

Uploading a build#

  1. In the row for the OS you want, click the upload button. A form titled Upload for <OS> opens below the table.
  2. Check the Operating System. It is preset to the row you clicked, and you can change it here.
  3. Enter a Version (required, e.g. 1.2.12). The file picker stays disabled until you do. You can also add optional Release Notes.
  4. Click Browse Files and choose the file. It uploads straight away. Files can be up to 500 MB.

If it succeeds you see the toast Remote helper uploaded or HermesCLI uploaded, the form closes, and the table shows the new build. If the server rejects the input (for example a version containing path characters), the reason appears in red under the form. Any other failure reads Failed to upload binary. To leave without uploading, use the cancel button in the form header.

The upload screen does not care about the file name: the server stores the Remote Helper as Hermes.RemoteHelper.exe, and HermesCLI as HermesCLI.exe on Windows and HermesCLI on Linux and macOS. Agents use those same names when they place the file.

One build per OS#

The server keeps exactly one build per operating system for each of the two components. A new upload works like this:

  1. The server writes the file to disk and calculates its SHA-256 hash while it streams in.
  2. It signs that hash with your server's certificate authority. If signing fails, the upload fails and nothing changes.
  3. It records the build as the active build for its OS. If you upload a version that is already stored for that OS, that record is overwritten in place and keeps its current active setting.
  4. Only after all of that succeeds does it delete every older build for that OS, including the stored files.

So a failed upload always leaves the previous build in place. Removing the old builds is best effort: if an old file can't be deleted right now (for example, an agent is still downloading it), the server logs a warning, keeps the file, and tries again on the next upload for that OS. The new build is already live either way. There is no separate activate step and no rollback list in the UI. To go back to an earlier version, upload that build again.

Upgraded from a build that kept several versions?

If your server still holds more than one build for an OS from before this rule, the table shows the one agents receive: the newest active build, or the newest build if none is active. The extra builds go away the next time you upload for that OS, or you can remove them through the REST API.

How agents pick up a build#

Agents ask the server for the newest active build for their OS, over their existing secured agent connection. There is no separate download server or HTTP download URL. If nothing is stored for that OS, the server tells the agent so and the agent carries on normally.

Problems on the agent side are written to the agent log (see Agent Logs). HermesCLI lines start with CliProvision:, for example CliProvision: HermesCLI <version> failed verification: … NOT placing it. or CliProvision: server sent an unsigned CLI; refusing it.

Permissions#

Every Remote Helper and HermesCLI action, including listing, requires the binaries.manage permission. Of the built-in roles, only Admin has it. Operator's binaries.view is not enough here. You can grant binaries.manage to a custom role (see Roles and the Permission Model). In the UI, every upload checks the permission again when it runs. Over REST, unauthenticated callers get 401 and callers without the permission get 403.

REST API#

The two components have identical endpoints under different base paths. Use api/helper-binaries for the Remote Helper and api/cli-binaries for HermesCLI. Responses use the standard Athena envelope (the result is in data).

Method & pathPurpose
GET …?os={OS}List the stored builds, newest first. os is optional and filters to one platform.
GET …/latest?os={OS}The build an agent on that OS receives: the newest active one. os defaults to Windows. Returns 404 when none is stored (No active helper binary found for … / No active HermesCLI found for …).
POST …Upload a build. Multipart form: file, os, version, optional releaseNotes. Up to 500 MB. The server hashes and signs it, makes it active, and removes the older builds for that OS.
POST …/{id}/activateMark a stored build active. This rarely matters now, because every upload is active already.
DELETE …/{id}Delete a build and its stored file. It can't be undone. If you delete the only build for an OS, agents on that OS get nothing until you upload a new one.

Each build record contains:

FieldMeaning
idUnique identifier (GUID).
versionThe version string.
osWindows or Linux for the helper. Windows, Linux or MacOS for HermesCLI.
fileNameThe name of the file you uploaded.
fileHashThe SHA-256 hash, as lower-case hex.
fileSizeSize in bytes.
signatureYour server CA's signature over the hash (Base64). It is null only for legacy builds.
releaseNotesOptional notes.
isActiveWhether agents can receive this build.
downloadCountHow many times the build has been sent to an agent.
uploadedBy / uploadedAtWho uploaded it and when.

An upload returns 400 with one of these messages when the input is invalid:

Any other failure returns 500 (Failed to upload helper binary / Failed to upload HermesCLI).

# Publish a new HermesCLI build for Linux
curl -H "Authorization: Bearer $TOKEN" \
  -F "file=@./HermesCLI" -F "os=Linux" -F "version=1.2.25" \
  https://athena.example.local:8443/api/cli-binaries

# What will a connecting macOS agent receive?
curl -H "Authorization: Bearer $TOKEN" "https://athena.example.local:8443/api/cli-binaries/latest?os=MacOS"

For authentication options, including long-lived tokens, see API Reference and API Tokens.

PowerShell#

The Athena module has cmdlets for the Remote Helper. There are no HermesCLI binary cmdlets yet, so use the Settings view or the REST API for those.

CmdletPurpose
Get-AthenaHelperBinaryList helpers, filter by -Os (Windows/Linux), or get the -Latest active build for an OS.
Send-AthenaHelperBinaryUpload a build: -Path, -Os (Windows/Linux), -Version, optional -ReleaseNotes. It replaces the current build for that OS.
Enable-AthenaHelperBinaryMark a helper active by -Id (accepts pipeline input).
Remove-AthenaHelperBinaryPermanently delete a helper by -Id. It asks for confirmation unless you pass -Force.
# Replace the Windows helper and confirm what agents will receive
Send-AthenaHelperBinary -Path "C:\Build\Hermes.RemoteHelper.exe" -Os Windows -Version "1.3.22" -ReleaseNotes "Screen-share fixes"
Get-AthenaHelperBinary -Latest -Os Windows

See the PowerShell Module reference for full cmdlet details.

Storage & backup#

Uploaded builds are stored under the server's bulk-storage root (Storage:DataRoot), one folder per OS and version:

ComponentFolder under the data rootOverride keyAppliance / container path
Remote Helper<root>/HelperBinariesHelperBinary:BinariesPath/data/storage/HelperBinaries
HermesCLI<root>/CliBinariesCliBinary:BinariesPath/data/storage/CliBinaries

The server must be able to write to these folders. If it can't, the error message names the path and the setting that moves it. Back them up together with the rest of the data root (see Data Directories). The builds can be uploaded again, but on an air-gapped network that is inconvenient.

Air-gapped by design

Neither component is ever fetched from the internet. You bring a build onto the isolated network, upload it to your server, and agents receive it over the connection they already hold. Each agent checks it against your own certificate authority before using it. See Air-Gapped Operation.