latitude-telemetry-hermes
Stream Hermes Agent (Nous Research's open-source agent harness) sessions to Latitude as OTLP traces — user prompts, model turns, tool calls, tool results, token usage, and the real system prompt — so you get full-fidelity observability of your agent runs in Latitude.
This is the Hermes counterpart to the other harness integrations
(@latitude-data/claude-code-telemetry,
@latitude-data/pi-telemetry,
@latitude-data/openclaw-telemetry). Hermes is a Python harness and loads
plugins from Python, so this connector ships as a pip package rather than npm.
Install
pip install latitude-telemetry-hermes
Then enable the plugin by adding latitude to ~/.hermes/config.yaml:
plugins:
enabled:
- latitude
Hermes discovers the plugin through the hermes_agent.plugins entry point — there are no
files to copy.
Enable via
config.yaml, nothermes plugins enable latitude. Hermes's runtime loads pip/entry-point plugins, but itshermes plugins list/enable/disablecommands scan only bundled and~/.hermes/plugins/directory plugins — so they report a pip-installed plugin as "not installed or bundled" even though it loads fine (hermes-agent#23802). Theconfig.yamlentry above is the reliable way to turn it on.
Plugin not loading at all? It must be installed into the same Python that runs Hermes. The official installer puts Hermes in its own venv (
~/.hermes/hermes-agent/venv) that ignores your shell's Python — so a plainpip installfrom another interpreter (system, pyenv, mise, …) won't be discovered. Install into Hermes's venv instead:~/.hermes/bin/uv pip install --python ~/.hermes/hermes-agent/venv/bin/python latitude-telemetry-hermes
Set your credentials in the environment (or in ~/.hermes/.env,
which Hermes loads at startup):
export LATITUDE_API_KEY=lat_xxx
export LATITUDE_PROJECT=my-project
That's it — every session is now streamed to Latitude as OTLP traces. To export
structure and timing without prompt/response/tool content, set LATITUDE_NO_CONTENT=true.
Self-hosted / local Latitude? The plugin defaults to Latitude Cloud (
https://ingest.latitude.so). Point it at your own ingest by settingLATITUDE_BASE_URLto the ingest origin only — e.g.http://localhost:3002for a local dev stack — without the/v1/tracessuffix (the plugin appends it). YourLATITUDE_API_KEYandLATITUDE_PROJECTmust come from that same instance.
How it works
Hermes loads pip-installed plugins via the hermes_agent.plugins entry point and calls
the module's register(ctx) function, which subscribes to the lifecycle hooks
(pre_api_request / post_api_request, pre_llm_call / post_llm_call,
pre_tool_call / post_tool_call, and on_session_end / on_session_finalize) — the
same hooks the bundled langfuse and nemo_relay plugins use. The *_api_request pair is
the LLM-call span boundary; the *_llm_call pair frames the turn; the session hooks flush
the exporter so short / one-shot runs (hermes -z "…") ship before the process exits.
The plugin owns the OTLP mapping for that hook stream. It assembles one trace per turn:
interaction (one user turn)
├── llm_request (one per model call: model, provider, tokens, finish reason, system prompt)
├── tool_execution (one per tool call: name, arguments, result, success)
└── llm_request (the final answer)
Spans follow Latitude's GenAI semantic conventions (gen_ai.*), so they render natively
in the Latitude trace viewer. Content-bearing attributes are tagged :gated and dropped
before export when content capture is disabled. The plugin is fail-open — a telemetry
error never affects the agent — and depends only on the Python standard library (plus
certifi, which Hermes already ships, for TLS verification).
Configuration
All configuration is read from environment variables:
| Env | Default | Description |
|---|---|---|
LATITUDE_API_KEY |
— | API key (required) |
LATITUDE_PROJECT / LATITUDE_PROJECT_SLUG |
— | Project slug (required) |
LATITUDE_BASE_URL |
https://ingest.latitude.so |
Ingest origin (no path; the plugin appends /v1/traces). Set to your own ingest for self-hosted/local, e.g. http://localhost:3002 |
LATITUDE_HERMES_TELEMETRY_ENABLED / LATITUDE_TELEMETRY_ENABLED |
true |
Master switch |
LATITUDE_HERMES_NO_CONTENT / LATITUDE_NO_CONTENT |
false |
Export structure/timing only (no prompts, responses, or tool I/O) |
LATITUDE_DEBUG |
false |
Verbose logging |
Telemetry stays off until both LATITUDE_API_KEY and a project are set.
Development
uv sync
uv run pytest
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file latitude_telemetry_hermes-0.1.1.tar.gz.
File metadata
- Download URL: latitude_telemetry_hermes-0.1.1.tar.gz
- Upload date:
- Size: 21.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb000b26453ff44bd7ef99798fae5c0c4d234d8e4094243429981e16ce82b60f
|
|
| MD5 |
fd864fb0f183eebe6d689369acc27cda
|
|
| BLAKE2b-256 |
96399f6cfe0938fbdda4669fff49a4fbfbe1d516568fa9cfa9c70be41e637065
|
File details
Details for the file latitude_telemetry_hermes-0.1.1-py3-none-any.whl.
File metadata
- Download URL: latitude_telemetry_hermes-0.1.1-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aba507300899d20ec2455f5d2b96cab8c77a688b856dad71557f9ad18d15d2f0
|
|
| MD5 |
a7c60b4b2d0c6a665aa9304b20dcc7ec
|
|
| BLAKE2b-256 |
9f7ce2902c20697eb4f6a44a57f2b156a837a55dbfb5d4a756ef96d6bfcc78e6
|