Add support for indexing Hermes Agent (github.com/hermes-ai/hermes-agent)
session logs. Hermes is a multi-platform AI agent that records sessions
across CLI, Discord, webhooks, and cron — each getting its own project
in the UI (hermes-cli, hermes-discord, hermes-webhook, hermes-cron).
Hermes uses two session formats:
- Gateway (.jsonl): line-delimited JSON with a session_meta header,
per-message timestamps, and tool_calls embedded in assistant messages.
- CLI (.json): single JSON object with envelope metadata (session_id,
model, platform, session_start, last_updated) and a messages array.
The parser discovers both formats, with .jsonl taking priority when a
session exists in both (gateway sessions are saved in both formats).
Naive timestamps (no timezone offset) are parsed with time.Local since
Hermes records wall-clock time without UTC indicators.
Files changed:
- internal/parser/hermes.go — parser, discovery, helpers (new)
- internal/parser/types.go — AgentHermes const + Registry entry
- internal/parser/taxonomy.go — Hermes tool name categorization
- internal/sync/engine.go — processHermes dispatch
Summary
Add Hermes Agent as a supported agent with full session parsing and discovery.
Hermes Agent (github.com/hermes-ai/hermes-agent) is a multi-platform AI coding agent that records sessions across CLI, Discord, webhooks, and cron jobs. Each platform gets its own project in the UI (hermes-cli, hermes-discord, hermes-webhook, hermes-cron).
Two session formats
Gateway (.jsonl) — Line-delimited JSON used by messaging platform sessions (Discord, webhooks, cron):
session_metaheader with model, platform, and tool definitionstool_callsarrayCLI (.json) — Single JSON object used by interactive CLI sessions:
session_id,model,platform,session_start,last_updatedsession_<id>.json(vs<id>.jsonlfor gateway)Deduplication
Some sessions exist in both formats (gateway saves both). The discovery function collects
.jsonlfiles first, then only adds.jsonfiles whose session ID isn't already covered —.jsonltakes priority since it has richer per-message timestamps.Naive timestamps
Hermes records wall-clock time without UTC offsets. Timestamps are parsed with
time.ParseInLocation(... time.Local)so they're interpreted in the server's timezone rather than defaulting to UTC.Files changed
internal/parser/hermes.go— parser, discovery, helpers (new, ~550 lines)internal/parser/types.go—AgentHermesconst + Registry entryinternal/parser/taxonomy.go— Hermes tool name → category mappingsinternal/sync/engine.go—processHermesdispatch + method