Repository files navigation

ticktock

Time awareness for Claude Code.

What it does

ticktock is a Claude Code plugin that injects timestamps into Claude's context via hooks, so Claude always knows the current time and how long has passed between interactions. Smart filtering only shows elapsed time when the gap exceeds a configurable threshold (default 30 seconds), keeping token usage minimal during rapid back-and-forth exchanges.

Output examples

Below threshold (rapid interaction):

[14:32:15 UTC-7]

Above threshold (gap exceeded 30s):

[14:32:15 UTC-7 | +3m25s]

Session start:

[Session started: 2026-04-05 14:30:00 UTC-7]

With timezone display disabled (/ticktock tz off):

[14:32:15]

Installation

From the CLI:

claude plugin marketplace add nnemirovsky/ticktock
claude plugin install ticktock

Or interactively inside Claude Code:

/plugin marketplace add nnemirovsky/ticktock
/plugin install ticktock

Configuration

ticktock stores its configuration at ~/.claude/ticktock.json. A default config is created automatically on first run:

{
"enabled": true,
"hooks": {
"SessionStart": true,
"UserPromptSubmit": true,
"PreToolUse": true,
"PostToolUse": true
},
"thresholdSeconds": 30,
"showTimezone": true,
"timezone": "auto"
}
  • showTimezone: whether to append timezone offset to timestamps (default: true)
  • timezone: timezone to use. "auto" detects from system. Also accepts IANA names (America/New_York) or UTC offsets (UTC+3, UTC-5:30). Case-insensitive.

Slash commands

CommandDescription
/ticktockShow current configuration
/ticktock onEnable ticktock
/ticktock offDisable ticktock
/ticktock threshold <seconds>Set elapsed time threshold
/ticktock hook <name> on|offToggle an individual hook
/ticktock tzShow current timezone setting
/ticktock tz <timezone>Set timezone (IANA name or UTC offset)
/ticktock tz autoRevert to system timezone auto-detection
/ticktock tz on|offShow/hide timezone in timestamps

Valid hook names: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse.

Hooks

HookFires whenWhat it reveals
SessionStartSession starts, resumes, or is cleared/compactedFull date and time of session start
UserPromptSubmitUser submits a promptCurrent time; elapsed time since last interaction
PreToolUseBefore a tool is invokedCurrent time; how long since the previous action
PostToolUseAfter a tool completesCurrent time; how long the tool execution took

Dependencies

  • bash (4.0+)
  • jq (brew install jq on macOS)

License

MIT

About

Time awareness plugin for Claude Code — injects timestamps and elapsed time into context via hooks

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

ticktock

Time awareness for Claude Code.

What it does

ticktock is a Claude Code plugin that injects timestamps into Claude's context via hooks, so Claude always knows the current time and how long has passed between interactions. Smart filtering only shows elapsed time when the gap exceeds a configurable threshold (default 30 seconds), keeping token usage minimal during rapid back-and-forth exchanges.

Output examples

Below threshold (rapid interaction):

[14:32:15 UTC-7]

Above threshold (gap exceeded 30s):

[14:32:15 UTC-7 | +3m25s]

Session start:

[Session started: 2026-04-05 14:30:00 UTC-7]

With timezone display disabled (/ticktock tz off):

[14:32:15]

Installation

From the CLI:

claude plugin marketplace add nnemirovsky/ticktock
claude plugin install ticktock

Or interactively inside Claude Code:

/plugin marketplace add nnemirovsky/ticktock
/plugin install ticktock

Configuration

ticktock stores its configuration at ~/.claude/ticktock.json. A default config is created automatically on first run:

{
"enabled": true,
"hooks": {
"SessionStart": true,
"UserPromptSubmit": true,
"PreToolUse": true,
"PostToolUse": true
},
"thresholdSeconds": 30,
"showTimezone": true,
"timezone": "auto"
}
  • showTimezone: whether to append timezone offset to timestamps (default: true)
  • timezone: timezone to use. "auto" detects from system. Also accepts IANA names (America/New_York) or UTC offsets (UTC+3, UTC-5:30). Case-insensitive.

Slash commands

CommandDescription
/ticktockShow current configuration
/ticktock onEnable ticktock
/ticktock offDisable ticktock
/ticktock threshold <seconds>Set elapsed time threshold
/ticktock hook <name> on|offToggle an individual hook
/ticktock tzShow current timezone setting
/ticktock tz <timezone>Set timezone (IANA name or UTC offset)
/ticktock tz autoRevert to system timezone auto-detection
/ticktock tz on|offShow/hide timezone in timestamps

Valid hook names: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse.

Hooks

HookFires whenWhat it reveals
SessionStartSession starts, resumes, or is cleared/compactedFull date and time of session start
UserPromptSubmitUser submits a promptCurrent time; elapsed time since last interaction
PreToolUseBefore a tool is invokedCurrent time; how long since the previous action
PostToolUseAfter a tool completesCurrent time; how long the tool execution took

Dependencies

  • bash (4.0+)
  • jq (brew install jq on macOS)

License

MIT

About

Time awareness plugin for Claude Code — injects timestamps and elapsed time into context via hooks

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ticktock

Time awareness for Claude Code.

What it does

ticktock is a Claude Code plugin that injects timestamps into Claude's context via hooks, so Claude always knows the current time and how long has passed between interactions. Smart filtering only shows elapsed time when the gap exceeds a configurable threshold (default 30 seconds), keeping token usage minimal during rapid back-and-forth exchanges.

Output examples

Below threshold (rapid interaction):

[14:32:15 UTC-7]

Above threshold (gap exceeded 30s):

[14:32:15 UTC-7 | +3m25s]

Session start:

[Session started: 2026-04-05 14:30:00 UTC-7]

With timezone display disabled (/ticktock tz off):

[14:32:15]

Installation

From the CLI:

claude plugin marketplace add nnemirovsky/ticktock
claude plugin install ticktock

Or interactively inside Claude Code:

/plugin marketplace add nnemirovsky/ticktock
/plugin install ticktock

Configuration

ticktock stores its configuration at ~/.claude/ticktock.json. A default config is created automatically on first run:

{
"enabled": true,
"hooks": {
"SessionStart": true,
"UserPromptSubmit": true,
"PreToolUse": true,
"PostToolUse": true
},
"thresholdSeconds": 30,
"showTimezone": true,
"timezone": "auto"
}
  • showTimezone: whether to append timezone offset to timestamps (default: true)
  • timezone: timezone to use. "auto" detects from system. Also accepts IANA names (America/New_York) or UTC offsets (UTC+3, UTC-5:30). Case-insensitive.

Slash commands

CommandDescription
/ticktockShow current configuration
/ticktock onEnable ticktock
/ticktock offDisable ticktock
/ticktock threshold <seconds>Set elapsed time threshold
/ticktock hook <name> on|offToggle an individual hook
/ticktock tzShow current timezone setting
/ticktock tz <timezone>Set timezone (IANA name or UTC offset)
/ticktock tz autoRevert to system timezone auto-detection
/ticktock tz on|offShow/hide timezone in timestamps

Valid hook names: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse.

Hooks

HookFires whenWhat it reveals
SessionStartSession starts, resumes, or is cleared/compactedFull date and time of session start
UserPromptSubmitUser submits a promptCurrent time; elapsed time since last interaction
PreToolUseBefore a tool is invokedCurrent time; how long since the previous action
PostToolUseAfter a tool completesCurrent time; how long the tool execution took

Dependencies

  • bash (4.0+)
  • jq (brew install jq on macOS)

License

MIT

About

Time awareness plugin for Claude Code — injects timestamps and elapsed time into context via hooks

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ticktock

Time awareness for Claude Code.

What it does

ticktock is a Claude Code plugin that injects timestamps into Claude's context via hooks, so Claude always knows the current time and how long has passed between interactions. Smart filtering only shows elapsed time when the gap exceeds a configurable threshold (default 30 seconds), keeping token usage minimal during rapid back-and-forth exchanges.

Output examples

Below threshold (rapid interaction):

[14:32:15 UTC-7]

Above threshold (gap exceeded 30s):

[14:32:15 UTC-7 | +3m25s]

Session start:

[Session started: 2026-04-05 14:30:00 UTC-7]

With timezone display disabled (/ticktock tz off):

[14:32:15]

Installation

From the CLI:

claude plugin marketplace add nnemirovsky/ticktock
claude plugin install ticktock

Or interactively inside Claude Code:

/plugin marketplace add nnemirovsky/ticktock
/plugin install ticktock

Configuration

ticktock stores its configuration at ~/.claude/ticktock.json. A default config is created automatically on first run:

{
"enabled": true,
"hooks": {
"SessionStart": true,
"UserPromptSubmit": true,
"PreToolUse": true,
"PostToolUse": true
},
"thresholdSeconds": 30,
"showTimezone": true,
"timezone": "auto"
}
  • showTimezone: whether to append timezone offset to timestamps (default: true)
  • timezone: timezone to use. "auto" detects from system. Also accepts IANA names (America/New_York) or UTC offsets (UTC+3, UTC-5:30). Case-insensitive.

Slash commands

CommandDescription
/ticktockShow current configuration
/ticktock onEnable ticktock
/ticktock offDisable ticktock
/ticktock threshold <seconds>Set elapsed time threshold
/ticktock hook <name> on|offToggle an individual hook
/ticktock tzShow current timezone setting
/ticktock tz <timezone>Set timezone (IANA name or UTC offset)
/ticktock tz autoRevert to system timezone auto-detection
/ticktock tz on|offShow/hide timezone in timestamps

Valid hook names: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse.

Hooks

HookFires whenWhat it reveals
SessionStartSession starts, resumes, or is cleared/compactedFull date and time of session start
UserPromptSubmitUser submits a promptCurrent time; elapsed time since last interaction
PreToolUseBefore a tool is invokedCurrent time; how long since the previous action
PostToolUseAfter a tool completesCurrent time; how long the tool execution took

Dependencies

  • bash (4.0+)
  • jq (brew install jq on macOS)

License

MIT

About

Time awareness plugin for Claude Code — injects timestamps and elapsed time into context via hooks

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

ticktock

Time awareness for Claude Code.

What it does

ticktock is a Claude Code plugin that injects timestamps into Claude's context via hooks, so Claude always knows the current time and how long has passed between interactions. Smart filtering only shows elapsed time when the gap exceeds a configurable threshold (default 30 seconds), keeping token usage minimal during rapid back-and-forth exchanges.

Output examples

Below threshold (rapid interaction):

[14:32:15 UTC-7]

Above threshold (gap exceeded 30s):

[14:32:15 UTC-7 | +3m25s]

Session start:

[Session started: 2026-04-05 14:30:00 UTC-7]

With timezone display disabled (/ticktock tz off):

[14:32:15]

Installation

From the CLI:

claude plugin marketplace add nnemirovsky/ticktock
claude plugin install ticktock

Or interactively inside Claude Code:

/plugin marketplace add nnemirovsky/ticktock
/plugin install ticktock

Configuration

ticktock stores its configuration at ~/.claude/ticktock.json. A default config is created automatically on first run:

{
"enabled": true,
"hooks": {
"SessionStart": true,
"UserPromptSubmit": true,
"PreToolUse": true,
"PostToolUse": true
},
"thresholdSeconds": 30,
"showTimezone": true,
"timezone": "auto"
}
  • showTimezone: whether to append timezone offset to timestamps (default: true)
  • timezone: timezone to use. "auto" detects from system. Also accepts IANA names (America/New_York) or UTC offsets (UTC+3, UTC-5:30). Case-insensitive.

Slash commands

CommandDescription
/ticktockShow current configuration
/ticktock onEnable ticktock
/ticktock offDisable ticktock
/ticktock threshold <seconds>Set elapsed time threshold
/ticktock hook <name> on|offToggle an individual hook
/ticktock tzShow current timezone setting
/ticktock tz <timezone>Set timezone (IANA name or UTC offset)
/ticktock tz autoRevert to system timezone auto-detection
/ticktock tz on|offShow/hide timezone in timestamps

Valid hook names: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse.

Hooks

HookFires whenWhat it reveals
SessionStartSession starts, resumes, or is cleared/compactedFull date and time of session start
UserPromptSubmitUser submits a promptCurrent time; elapsed time since last interaction
PreToolUseBefore a tool is invokedCurrent time; how long since the previous action
PostToolUseAfter a tool completesCurrent time; how long the tool execution took

Dependencies

  • bash (4.0+)
  • jq (brew install jq on macOS)

License

MIT

About

Time awareness plugin for Claude Code — injects timestamps and elapsed time into context via hooks

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ticktock

Time awareness for Claude Code.

What it does

ticktock is a Claude Code plugin that injects timestamps into Claude's context via hooks, so Claude always knows the current time and how long has passed between interactions. Smart filtering only shows elapsed time when the gap exceeds a configurable threshold (default 30 seconds), keeping token usage minimal during rapid back-and-forth exchanges.

Output examples

Below threshold (rapid interaction):

[14:32:15 UTC-7]

Above threshold (gap exceeded 30s):

[14:32:15 UTC-7 | +3m25s]

Session start:

[Session started: 2026-04-05 14:30:00 UTC-7]

With timezone display disabled (/ticktock tz off):

[14:32:15]

Installation

From the CLI:

claude plugin marketplace add nnemirovsky/ticktock
claude plugin install ticktock

Or interactively inside Claude Code:

/plugin marketplace add nnemirovsky/ticktock
/plugin install ticktock

Configuration

ticktock stores its configuration at ~/.claude/ticktock.json. A default config is created automatically on first run:

{
"enabled": true,
"hooks": {
"SessionStart": true,
"UserPromptSubmit": true,
"PreToolUse": true,
"PostToolUse": true
},
"thresholdSeconds": 30,
"showTimezone": true,
"timezone": "auto"
}
  • showTimezone: whether to append timezone offset to timestamps (default: true)
  • timezone: timezone to use. "auto" detects from system. Also accepts IANA names (America/New_York) or UTC offsets (UTC+3, UTC-5:30). Case-insensitive.

Slash commands

CommandDescription
/ticktockShow current configuration
/ticktock onEnable ticktock
/ticktock offDisable ticktock
/ticktock threshold <seconds>Set elapsed time threshold
/ticktock hook <name> on|offToggle an individual hook
/ticktock tzShow current timezone setting
/ticktock tz <timezone>Set timezone (IANA name or UTC offset)
/ticktock tz autoRevert to system timezone auto-detection
/ticktock tz on|offShow/hide timezone in timestamps

Valid hook names: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse.

Hooks

HookFires whenWhat it reveals
SessionStartSession starts, resumes, or is cleared/compactedFull date and time of session start
UserPromptSubmitUser submits a promptCurrent time; elapsed time since last interaction
PreToolUseBefore a tool is invokedCurrent time; how long since the previous action
PostToolUseAfter a tool completesCurrent time; how long the tool execution took

Dependencies

  • bash (4.0+)
  • jq (brew install jq on macOS)

License

MIT

About

Time awareness plugin for Claude Code — injects timestamps and elapsed time into context via hooks

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ticktock

Time awareness for Claude Code.

What it does

ticktock is a Claude Code plugin that injects timestamps into Claude's context via hooks, so Claude always knows the current time and how long has passed between interactions. Smart filtering only shows elapsed time when the gap exceeds a configurable threshold (default 30 seconds), keeping token usage minimal during rapid back-and-forth exchanges.

Output examples

Below threshold (rapid interaction):

[14:32:15 UTC-7]

Above threshold (gap exceeded 30s):

[14:32:15 UTC-7 | +3m25s]

Session start:

[Session started: 2026-04-05 14:30:00 UTC-7]

With timezone display disabled (/ticktock tz off):

[14:32:15]

Installation

From the CLI:

claude plugin marketplace add nnemirovsky/ticktock
claude plugin install ticktock

Or interactively inside Claude Code:

/plugin marketplace add nnemirovsky/ticktock
/plugin install ticktock

Configuration

ticktock stores its configuration at ~/.claude/ticktock.json. A default config is created automatically on first run:

{
"enabled": true,
"hooks": {
"SessionStart": true,
"UserPromptSubmit": true,
"PreToolUse": true,
"PostToolUse": true
},
"thresholdSeconds": 30,
"showTimezone": true,
"timezone": "auto"
}
  • showTimezone: whether to append timezone offset to timestamps (default: true)
  • timezone: timezone to use. "auto" detects from system. Also accepts IANA names (America/New_York) or UTC offsets (UTC+3, UTC-5:30). Case-insensitive.

Slash commands

CommandDescription
/ticktockShow current configuration
/ticktock onEnable ticktock
/ticktock offDisable ticktock
/ticktock threshold <seconds>Set elapsed time threshold
/ticktock hook <name> on|offToggle an individual hook
/ticktock tzShow current timezone setting
/ticktock tz <timezone>Set timezone (IANA name or UTC offset)
/ticktock tz autoRevert to system timezone auto-detection
/ticktock tz on|offShow/hide timezone in timestamps

Valid hook names: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse.

Hooks

HookFires whenWhat it reveals
SessionStartSession starts, resumes, or is cleared/compactedFull date and time of session start
UserPromptSubmitUser submits a promptCurrent time; elapsed time since last interaction
PreToolUseBefore a tool is invokedCurrent time; how long since the previous action
PostToolUseAfter a tool completesCurrent time; how long the tool execution took

Dependencies

  • bash (4.0+)
  • jq (brew install jq on macOS)

License

MIT

About

Time awareness plugin for Claude Code — injects timestamps and elapsed time into context via hooks

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

ticktock

Time awareness for Claude Code.

What it does

ticktock is a Claude Code plugin that injects timestamps into Claude's context via hooks, so Claude always knows the current time and how long has passed between interactions. Smart filtering only shows elapsed time when the gap exceeds a configurable threshold (default 30 seconds), keeping token usage minimal during rapid back-and-forth exchanges.

Output examples

Below threshold (rapid interaction):

[14:32:15 UTC-7]

Above threshold (gap exceeded 30s):

[14:32:15 UTC-7 | +3m25s]

Session start:

[Session started: 2026-04-05 14:30:00 UTC-7]

With timezone display disabled (/ticktock tz off):

[14:32:15]

Installation

From the CLI:

claude plugin marketplace add nnemirovsky/ticktock
claude plugin install ticktock

Or interactively inside Claude Code:

/plugin marketplace add nnemirovsky/ticktock
/plugin install ticktock

Configuration

ticktock stores its configuration at ~/.claude/ticktock.json. A default config is created automatically on first run:

{
"enabled": true,
"hooks": {
"SessionStart": true,
"UserPromptSubmit": true,
"PreToolUse": true,
"PostToolUse": true
},
"thresholdSeconds": 30,
"showTimezone": true,
"timezone": "auto"
}
  • showTimezone: whether to append timezone offset to timestamps (default: true)
  • timezone: timezone to use. "auto" detects from system. Also accepts IANA names (America/New_York) or UTC offsets (UTC+3, UTC-5:30). Case-insensitive.

Slash commands

CommandDescription
/ticktockShow current configuration
/ticktock onEnable ticktock
/ticktock offDisable ticktock
/ticktock threshold <seconds>Set elapsed time threshold
/ticktock hook <name> on|offToggle an individual hook
/ticktock tzShow current timezone setting
/ticktock tz <timezone>Set timezone (IANA name or UTC offset)
/ticktock tz autoRevert to system timezone auto-detection
/ticktock tz on|offShow/hide timezone in timestamps

Valid hook names: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse.

Hooks

HookFires whenWhat it reveals
SessionStartSession starts, resumes, or is cleared/compactedFull date and time of session start
UserPromptSubmitUser submits a promptCurrent time; elapsed time since last interaction
PreToolUseBefore a tool is invokedCurrent time; how long since the previous action
PostToolUseAfter a tool completesCurrent time; how long the tool execution took

Dependencies

  • bash (4.0+)
  • jq (brew install jq on macOS)

License

MIT

About

Time awareness plugin for Claude Code — injects timestamps and elapsed time into context via hooks

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages