Skip to main content

live-time

❖ Communityv1.0.0★ 2

Inject live current time into every LLM call via the pre_llm_call hook — fixes stale session-start timestamps in long/cross-day conversations.

Open in Hermes Desktop
hermes plugins install live-time

What it adds

Hooks 1

pre_llm_call

README

From the reviewed commit 8e5c800 ↗; it updates when the author re-pins.

The problem it kills

Hermes stamps Conversation started: ... once, when the session is created — and never refreshes it. Keep one conversation going for a day or a week and the model is quietly stuck at session-start time: it calls yesterday "today", misses that it's 3 a.m., and can't tell a five-minute reply from a two-day gap.

live-time re-injects the real, current, timezone-aware time on every LLM call, so that whole class of confusion disappears. Tracking issue: #10421.

Before → after, in an ordinary cross-day session:

You        Let's keep going with option B.
Assistant  Sure — drafting the migration plan now.

          ······ you close the laptop; the session stays alive ······

You        OK, continue.

Assistant (without live-time)  Above, you said "today we'll finish" — so …
                               ← still convinced it's the same afternoon

Assistant (with live-time)     It's been about two days; picking up from option B,
                               here's the next step — and it's 11:40 p.m. your time,
                               so I'll keep this short.

Install

From the official catalog (recommended):

hermes plugins install live-time --enable
hermes gateway restart        # the plugin loads on gateway start

Straight from this repo:

hermes plugins install chenfeijiang95-ui/hermes-live-time --enable
hermes gateway restart

Manual (development): drop the repository contents into <HERMES_HOME>/plugins/live-time/ and restart. No build step — it's plain Python.

Verify in 5 seconds: ask the agent "what time is it right now?" — it should answer accurately without calling any tool. Or look for the injected marker in the request:

[LIVE-TIME] Now: 2026-09-19 16:32:56 (Weekday 6/7, Sat), TZ UTC+8.

What the model actually sees

One small, self-describing block, appended on the user-message side of every request:

[LIVE-TIME] Now: 2026-09-19 16:32:56 (Weekday 6/7, Sat), TZ UTC+8.
Injected by live-time plugin at THIS LLM call's moment. Use THIS as the
authoritative current time for any today/now/elapsed/date judgment. Ignore
the 'Conversation started' timestamp in the system prompt for anything
except session-creation facts.

The wording is deliberate: the block claims authority over "now", and explicitly tells the model to treat the session-start stamp as history rather than as the present.

Design guarantees

Guarantee Why it matters
Ephemeral Appended to the request only — never written into the cached system prompt, so prompt caching is unaffected.
Read-only Touches no transcript, no memory store, no network. Nothing is persisted.
Zero dependencies Standard library + PyYAML (already shipped with Hermes).
No internal imports Nothing from hermes_cli/agent/*, so upstream refactors can't break it.
Fails open Unreadable config, unknown timezone, missing zoneinfo data → falls back to system-local time instead of raising.
Single hook pre_llm_call and nothing else — one line in register().
Cheap A few string operations per turn. No I/O in the hot path.

Timezone resolution

Resolved fresh on each call, in this order:

  1. HERMES_TIMEZONE environment variable
  2. top-level timezone key in <HERMES_HOME | ~/.hermes>/config.yaml (parsed with yaml.safe_load, so inline comments and nesting are handled)
  3. local system timezone (rendered as an offset, e.g. TZ UTC+8)

Weekday labels are English abbreviations (Mon … Sun) on purpose: the injected block stays identical no matter what locale the rest of the conversation is in.

Profile caveat. When HERMES_HOME is unset, step 2 falls back to the default home's configuration file — so a non-default profile's timezone key is only picked up when Hermes exports HERMES_HOME for that profile, which is what the normal startup path does.

Troubleshooting

Symptom Likely cause
Agent still quotes a stale date Plugin isn't loaded — run hermes plugins list (look for live-time, status enabled), then hermes gateway restart.
Time is right but the timezone is off HERMES_TIMEZONE unset and config.yaml has no timezone key → it's using system-local. Set either one.
Timezone ignored for a specific profile See the profile caveat above: that profile must export HERMES_HOME.
Nothing in the request at all Another plugin or an older Hermes build. Check hermes plugins doctor . in the plugin directory.

Tests

pytest tests/test_live_time.py -v

Requires pytest in your environment.

Covers the injected-block shape, the timezone resolution order, and the invalid-timezone fallback path.

Links

License

MIT — see LICENSE.

← Back to the catalog · catalog built Oct 17, 2026