Memory

Chronos

Try it

Gives AI coding agents temporal awareness via a hook-backed ledger and decision rules. Activates whenever an agent reasons about recency, retry windows, memory staleness, deploy cooldowns, idle detection, or any "when / how long ago" question. Required for autonomous or long-running agents.

What it does

You are not temporally blind. Stop guessing "when" and "how long ago". You have a ledger. Use it.

The skill document

Chronos — Time Awareness for Agents

You are not temporally blind. Stop guessing "when" and "how long ago". You have a ledger. Use it.

What chronos gives you

When the host platform supports hooks (Claude Code, Codex, OpenCode-plugin), chronos populates three sources of truth:

  1. SessionStart baseline — injected into your context at session start:

    • now_utc — ISO-8601 UTC
    • now_local — ISO-8601 with offset
    • tz — timezone name + offset
    • ledger — absolute path to this session's JSONL tool-use ledger
    • state — absolute path to this session's state file
    • session — session ID
  2. Per-turn delta — injected on every user message:

    • now, turn, session_duration, since_last_user
  3. Tool-use ledger — JSONL file, one entry per tool invocation:

    • {tool_use_id, tool, args_hash, started_at, finished_at, duration_ms, success}

If the host platform does not support hooks (Cursor, Hermes, ADAL, plain skill-only mode), chronos degrades: run date -u or date -Iseconds at decision points and state explicitly "derived from shell, not ledger".

When to consult time — 7 triggers

1. Before retrying a failed command

Read the ledger for the same tool + args_hash.

  • If the last failure was < 60s ago with the same args, change strategy — don't re-run identically.
  • If 60s – 10min, consider one retry with a rationale.
  • If > 10min, circumstances may have changed; re-run is reasonable.

Deploy cooldowns: the same rule applies to deployments and pushes. If the last deploy failed under 60s ago, check logs and fix config before re-deploying. Don't re-trigger a broken pipeline without a changed state.

2. Before trusting memory, a cached finding, or a prior read

Staleness thresholds by source:

SourceStale afterAction when stale
git status, running processes, env vars5 min (same session)Re-query
File contents previously Read1 hr OR any write to that path since ReadRe-Read
Persistent memory (MemPalace, KG facts)7 days since last writeRe-verify before use
External API responses (prices, PR status, issues)5 minRe-fetch
Build/test resultsAfter any source change since that runRe-run
LLM's own prior claim ("earlier I saw...")Always verify against ledgerConsult ledger

3. Before reporting progress or writing a summary

Use session_duration to pick verbosity:

  • < 5 min — terse answer, no recap.
  • 5 – 30 min — one-paragraph summary of what changed.
  • > 30 min — structured recap with timestamped milestones from the ledger.

4. Before running a long or destructive command

Scan the ledger for the same tool recently. If the last 3 duration_ms values for that tool are growing (e.g. each > 2× the previous median), something is degrading. Surface it, don't silently wait.

5. Idle-loop detection (autonomous mode)

Whenever since_last_user exceeds the idle threshold (default 900s / 15 min, configurable via CHRONOS_IDLE_THRESHOLD_SEC) and you are still in an autonomous loop: pause. Summarize progress, list pending decisions, ask for direction. This prevents silent runaway.

For explicit autonomous loops (/loop, /autonomous), the threshold may be higher — but always escalate when session_duration > 2h without user input.

6. Before any "wait" / "in a few minutes" / "just now" statement

Replace imprecise language with a concrete delta from the ledger:

  • ❌ "Just tried that."

  • ✅ "Last attempt was 47s ago (tool_use_id abc123, failed with EACCES)."

  • ❌ "Let's wait a moment."

  • ✅ "Retry at 2026-04-23T20:45:00Z (+3 min from now)."

7. Date or time questions

Never guess. In order of preference:

  1. Read now_utc / now_local from the SessionStart context if session_duration < 10 min.
  2. Read latest finished_at in the ledger if < 10 min ago.
  3. Run date -u +"%Y-%m-%dT%H:%M:%SZ" fresh.

How to read the ledger

Ledger path is injected as ledger: in SessionStart context.

One line = one event (JSONL, append-only). Latest line for a given tool_use_id wins.

# Last 10 events
tail -n 10 "$LEDGER_PATH"

# Events in last 10 minutes (helper script)
./scripts/ledger_read.sh --since 10m

# Events for a specific tool in last hour
./scripts/ledger_read.sh --tool Bash --since 1h

# Last duration for a specific args_hash
./scripts/ledger_read.sh --tool Bash --args-hash abc123 --last

Entry shape:

{"tool_use_id":"abc","tool":"Bash","args_hash":"f0e1","started_at":"2026-04-23T20:00:00Z"}
{"tool_use_id":"abc","tool":"Bash","args_hash":"f0e1","finished_at":"2026-04-23T20:00:12Z","duration_ms":12034,"success":true}

Two lines per tool call: one on PreToolUse (started_at), one on PostToolUse (finished_at + duration). This is deliberate — async writes avoid adding latency.

args_hash is written by the PreToolUse hook: SHA-256 of the serialized tool arguments, first 12 hex characters. Filter the ledger by it to identify identical repeated calls. Do not compute it yourself — read it from the ledger only.

Failure modes to avoid

  • Do not re-derive elapsed time by counting messages or turns. Use wall clock from ledger.
  • Do not trust your own prior claim of "just now" from earlier in context. Ledger is the source of truth.
  • Do not issue "try again in a few minutes" without a concrete ISO timestamp or delta.
  • Do not silently hang in autonomous mode. Trigger #5 always applies.
  • Do not assume the ledger exists. Check for ledger: in your context first; degrade to date -u if absent.

Degraded mode (no hooks platform)

If you don't see chronos baseline in your context, the host platform doesn't support hooks. You still follow the decision rules — just swap ledger reads for:

  • Current time: date -u +"%Y-%m-%dT%H:%M:%SZ" (bash) or Get-Date -AsUTC -Format o (pwsh)
  • File mtime: stat -c %Y (bash) or (Get-Item ).LastWriteTimeUtc (pwsh)
  • Git age: git log -1 --format=%cI for last-commit ISO timestamp

State this explicitly: "No ledger on this platform; I'm using date -u as fallback."

Install / wiring

See installers// for platform-specific setup:

  • claude-code/ — full hook stack (5 events)
  • codex/ — full hook stack (PreToolUse matches Bash only)
  • opencode/ — TS plugin writes ledger; read via ledger_read.sh
  • cursor/ — rules-only degraded mode
  • hermes/, adal/, pi/, openclaw/ — SKILL-only ports

Why this matters

From arxiv 2510.23853 "Your LLM Agents are Temporally Blind" (Oct 2025): even when timestamps are present in context, the best frontier models achieve only 65% alignment with human temporal judgment. Timestamps appear in fewer than 4% of reasoning traces. The fix is not more plumbing — it's explicit decision rules that make the agent look at the clock at the right moments.

This SKILL.md is those rules.

Related skills

Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.

by Iván559 installs18 stars

Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.

by johnpatternai22 installs8 stars

Find why your productivity system keeps failing, then apply the smallest fix — capacity math, bottleneck routing, durable local notes.

by Iván855 installs69 stars

Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.

by nssa.io1.0k installs47 stars

Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.

by fly0pants4.3k installs296 stars

Run Git operations — commits, branches, merges, rebases, conflict resolution, and recovery — with safety rules enforced.

by Iván535 installs31 stars

More from othmanadi

Browse all skills

Persistent markdown planning files keep multi-step agent work organized and recoverable across context loss and /clear.

by othmanadi889 installs62 stars

Debug LangChain and LangGraph agents by fetching execution traces from LangSmith Studio. Use when debugging agent behavior, investigating errors, analyzing tool calls, checking memory operations, or examining agent performance. Automatically fetches recent traces and analyzes execution patterns. Requires langsmith-fetch CLI installed.

by othmanadi

A live visual Kanban board and continuity layer for long-running agentic tasks. Nobody wants to read a markdown plan or stare at raw HTML while an agent grinds for an hour, so Plandeck turns the plan into a board that organizes itself. Use it when a task is multi-step, long-running, or needs visual planning. Break the work into cards, declare which card depends on which, and Plandeck computes the critical path, auto-promotes cards to Ready as their dependencies clear, rolls up story-point estimates into an honest percent complete, and names the one next action. Plans, observed transitions, and last-known-good snapshots stay as plain files on disk, so they survive /clear and context resets. After a reset, run plandeck next to recover the single next move and its recent history. If the plan stops parsing, run plandeck doctor before using git. Renders a live board in the browser over SSE. Triggers on plan a project, break down a task, kanban board, task board, visual plan, long-running ag

by othmanadi

Build generative UI with OpenUI — any LLM provider, any backend language. Scaffold, integrate, validate.

by othmanadi1 installs

The barber for your coding agents' config. Weighs everything every agent on this machine loads (instruction files, memory, MCP servers, hooks, skills, commands, subagents, plugins, leftovers), prices each item in tokens from your own transcripts, and parks the dead weight with a receipt and an undo. Use this skill whenever the user mentions config bloat, a heavy or slow session start, tokens burned before the first word, too many MCP servers, hooks that are slow or fire on every prompt, skills or commands or plugins nobody invokes, cleaning up or auditing CLAUDE.md or AGENTS.md, Codex config, or asks what does my agent actually load, why is my context full before I type, which of these servers can I turn off, or what is this plugin costing me. Use it even when they only say the session feels bloated or startup got slow, and even when they mention /context, /doctor or /skill-doctor.

by othmanadi1 installs

Connect and operate the Loophole Bridge (Ableton Live MCP server). Use when the user wants to check Live/bridge prerequisites, wire an MCP client to Loophole, or run a Live editing recipe (humanize, build arrangement, batch rename, chord from prompt). Triggers: "is my Ableton bridge working", "set up loophole", "connect Claude to Ableton", "/doctor", "/setup".

by othmanadi1 installs