Left a deploy mid-flight at 1:50 AM and went to bed.
Opened the same Claude Code session at 9:55 AM and typed "ok, something is not working."
The response opened with: "Good morning. Let me check on the overnight deploy and figure out what's broken."
Not "what's the issue?" Not a generic context-free answer. Good morning — because the model knew I'd been gone eight hours, not eight minutes. It went on to anchor specifics:
"CI succeeded at 01:55… the deploy polling ran for ~10 minutes then likely silently hung when my gcloud auth expired."
Each line a duration or wall-clock claim against actual data.
Claude Code has no concept of time within a session (github.com/anthropics/c…, and worse, after a context compaction it's frozen at whatever the session-start time was, sometimes hours stale.
The standard workaround is shelling out to date whenever the model wants to make a time-relative claim. A tax on every response.
The fix was gist.github.com/asakin/…: two hooks. UserPromptSubmit injects [⏱ now=… utc=… unix_ms=… session=…] into every turn, throttled to once per five minutes. SessionStart re-injects after a compaction, Zero dependencies.
You don't install it by hand. you don’t have to know python, or how to install hooks. Paste the gist URL into Claude Code itself and say:
Look at this gist and install the temporal-awareness hook into my Claude Code. Default the window to 120 seconds:
The agent reads the gist, drops the script in ~/.claude/hooks/, edits your settings.json. It installs the thing that makes itself smarter. When a native version eventually ships, ask it to delete the hooks.
When a feature request stalls, scratch the itch. Ten minutes to build, one prompt to install and a meaningfully different collaborator the next morning.
P.S: no more “go to sleep” from Claude at 10am, or sending you to lunch because you mentioned that 10 hours ago. This is probably the biggest win.