Prefixes every prompt you type with the local date and time, visible to you and Claude.

A Claude Code mod that puts the local date and time (month-day, hour:minute) at the front of every prompt you type:
> [10-02 14:03 EDT] fix the bug
The timestamp is part of the prompt text, so it shows in the transcript and Claude reads it too.
Only prompts a person sent: typed at the terminal, or sent through Remote Control. Background task notifications, scheduled /loop prompts, other plugins, and peer sessions are left alone.
Claude Code 2.1.287 or later (mods support).
claude plugin marketplace add Vibe-Commit/claude-context-mods
claude plugin install prompt-timestamp@claude-context-mods
To try a local checkout instead: claude --plugin-dir ./prompt-timestamp.
claude plugin validate ./prompt-timestamp
claude plugin test ./prompt-timestamp
.claude-plugin/types/ is written by Claude Code when the mod loads and is git-ignored. Once it exists, tsc -p ./prompt-timestamp type-checks the mod.
hooks/register.ts 33 lines1import type { Register } from 'claude-code'
2
3// Only stamp prompts a person typed: the terminal, or Remote Control.
4const HUMAN_ORIGINS = new Set(['composer', 'bridge'])
5
6export const register: Register = on => {
7 on('prompt.submit', async ($, e, next) => {
8 if (!HUMAN_ORIGINS.has(e.origin.kind) || e.text.trim() === '') {
9 return next(e)
10 }
11
12 const stamp = formatStamp(await $.clock.now())
13
14 return next({ ...e, text: `[${stamp}] ${e.text}` })
15 })
16}
17
18// "10-02 14:03 EDT" in the machine's local time zone.
19export function formatStamp(ms: number): string {
20 const parts = new Intl.DateTimeFormat('en-US', {
21 month: '2-digit',
22 day: '2-digit',
23 hour: '2-digit',
24 minute: '2-digit',
25 hourCycle: 'h23',
26 timeZoneName: 'short',
27 }).formatToParts(new Date(ms))
28 const get = (type: Intl.DateTimeFormatPartTypes) =>
29 parts.find(p => p.type === type)?.value ?? ''
30
31 return `${get('month')}-${get('day')} ${get('hour')}:${get('minute')} ${get('timeZoneName')}`
32}
33