Claude Code Skill: реальное время и трекинг сессий за одну команду

Представьте: вы отдаёте Claude Code задачу отрефакторить модуль и уходите на кофе. Через час возвращаетесь — и не можете понять, когда именно он начал работу, сколько времени прошло и в рамках какой сессии всё это происходит. Claude просто не знает, который час.

Эта, казалось бы, мелкая проблема превращается в настоящий раздражитель при серьёзной ежедневной работе с агентом. Именно её решает open-source skill для Claude Code, который добавляет агенту понимание реального местного времени и трекинг сессий — и устанавливается буквально одной командой.

В этой статье разберём: почему Claude Code «слеп» ко времени, как работает механизм Skills в архитектуре инструмента, что именно делает этот skill, и как его интегрировать в свой рабочий процесс.


Почему Claude Code не знает, который час

Claud Code — это не просто чат-бот. Это не chatbot и не autocomplete. По сути это бесконечный цикл в терминале — агент получает задачу, выбирает инструмент, выполняет его, смотрит на результат и определяет следующий шаг. Продолжает до завершения или до момента, когда нужна помощь пользователя.

Однако у этого агента есть принципиальное ограничение: он не имеет доступа к системным часам. Языковая модель в основе Claude Code — это статичный артефакт обучения с датой среза знаний. Когда агент работает над задачей в 23:47 по московскому времени, он об этом попросту не знает.

Почему это важно на практике?

  • Агент не может корректно логировать время начала и конца задач
  • Временны́е метки в комментариях к коду или документации — неверные
  • Невозможно связать работу агента с реальными рабочими сессиями разработчика
  • Дебаг сложных задач без временно́го контекста превращается в головоломку
ℹ Факт о сессиях Claude Code
Каждая сессия Claude Code длится ровно 5 часов с момента первого сообщения. Таймер стартует с вашего первого сообщения, сессия истекает через 5 часов, при этом может существовать несколько активных сессий одновременно в виде скользящих окон. Без понимания реального времени агент не может ориентироваться в этих окнах.

Архитектура расширений Claude Code: Skills, Hooks и Plugins

Прежде чем говорить о конкретном skill, нужно понять, на чём он построен. Слой расширений Claude Code включает: MCP для подключения внешних сервисов (баз данных, GitHub, Sentry); Hooks — гарантированное выполнение shell-команд вне зависимости от поведения модели; Skills — встроенная доменная экспертиза, которую Claude применяет автоматически; Plugins — пакеты всего перечисленного для дистрибуции.


graph TD
    A[Claude Code Core] --> B[Extension Layer]
    B --> C[Skills]
    B --> D[Hooks]
    B --> E[MCP Servers]
    B --> F[Plugins]
    C --> G[Markdown-файл в ~/.claude/skills/]
    D --> H[Shell-скрипты на события]
    E --> I[JSON-RPC процессы]
    F --> J[Бандл Skills + Hooks + MCP]
    G --> K[Авто-загрузка при релевантном контексте]
    H --> L[PreToolUse / PostToolUse / UserPromptSubmit]

Что такое Skill в Claude Code

Skill — это .md-файл в ~/.claude/skills/. Никакого SDK, никакого API, никакого шага сборки. Вы пишете инструкции в markdown, и Claude Code следует им, когда они релевантны.

Skill — это markdown-файл по пути .claude/skills/<name>/SKILL.md с YAML-фронтматтером. Он автоматически обнаруживается и загружается прогрессивно — только когда это актуально.

По сути, skill — это способ «научить» агента вести себя определённым образом в конкретном контексте. Это YAML-сконфигурированные поведения, расширяющие Claude Code доменно-специфическими знаниями. Думайте о них как о плагинах, которые обучают Claude тому, как работает ваша команда.

Чем Skills отличаются от Hooks

Используйте hooks для действий, которые должны происходить каждый раз без исключений. Hooks запускают скрипты автоматически в определённых точках рабочего процесса Claude. В отличие от инструкций CLAUDE.md, которые носят рекомендательный характер, hooks детерминированы и гарантируют выполнение действия.

МеханизмФорматКогда загружаетсяГарантия выполнения
CLAUDE.mdMarkdownКаждая сессияНет (инструкция)
SkillMarkdown + YAMLПо релевантностиНет (инструкция)
HookShell-скриптПо событиюДа (детерминировано)
MCPПроцесс JSON-RPCПостоянноДа (вызов инструмента)
PluginБандл всегоПри установкеЗависит от содержимого
💡 Правило выбора
Skills — это markdown-инструкции, которые говорят модели, что делать. MCP-серверы — это исполняемые процессы, которые Claude вызывает для реального выполнения действий. Skills — это знание; MCP — это действие. Для отдачи реального времени нужен именно skill или hook: они инжектируют контекст без внешних зависимостей.

Проблема, которую решает skill: время и контекст сессии

Основная идея skill для локального времени и трекинга сессий проста до элегантности: при запуске каждой сессии автоматически инжектировать в контекст агента текущее местное время и метаданные текущей сессии.

Вот что происходит без этого skill:

Пользователь: Создай changelog с временными метками.
Claude: // Updated: [date unknown]
        // Refactored on: [timestamp unavailable]

И что происходит после его установки:

Пользователь: Создай changelog с временными метками.
Claude: // Updated: 2026-05-04 14:32 MSK
        // Session: #A4F2 | Duration: 47min | Tokens: ~12k

Разница кардинальная — особенно при работе с задачами, где порядок операций и их время имеют значение.

Как технически реализован skill

Скилл использует механизм hooks — конкретно событие UserPromptSubmit — чтобы при каждом новом промпте выполнять shell-команду, получающую системное время, и инжектировать результат в контекст перед тем, как модель начнёт обработку.

#!/bin/bash
# .claude/hooks/inject-time.sh
# Получаем время в нужном формате
LOCAL_TIME=$(date '+%Y-%m-%d %H:%M:%S %Z')
SESSION_START=$(cat ~/.claude/session_start 2>/dev/null || echo $LOCAL_TIME)

# Считаем длительность сессии
START_EPOCH=$(date -d "$SESSION_START" +%s 2>/dev/null || date -j -f "%Y-%m-%d %H:%M:%S" "$SESSION_START" +%s)
CURRENT_EPOCH=$(date +%s)
DURATION=$(( (CURRENT_EPOCH - START_EPOCH) / 60 ))

# Формируем JSON-ответ для Claude Code
jq -n \
  --arg time "$LOCAL_TIME" \
  --arg duration "${DURATION}min" \
  '{system_context: {local_time: $time, session_duration: $duration}}'

А вот как выглядит сам SKILL.md — файл с инструкциями для модели:

---
name: local-time-context
description: >
  Provides Claude with real local time and session tracking.
  Always use when creating timestamps, logs, changelogs,
  or when the user asks about time.
triggers:
  - timestamp
  - time
  - session
  - changelog
  - log
---

## Context Awareness

At the start of each response, you have access to:
- `system_context.local_time` — current local time of the user's machine
- `system_context.session_duration` — how long this session has been active

Always use these values when:
1. Creating timestamps in code, comments, or documentation
2. Answering questions about "when" something happened
3. Generating changelogs, commit messages, or session summaries
4. Logging task start/end times

Never hallucinate timestamps. Always use provided system_context.
⚠ Важно
Hooks в Claude Code выполняются с правами текущего пользователя и имеют доступ к файловой системе. Всегда проверяйте shell-скрипты перед установкой стороннего skill — особенно если он обращается к переменным окружения или сетевым ресурсам.

Установка: одна команда

Одним из главных преимуществ экосистемы Claude Code является то, что marketplace — это GitHub-репозиторий, который распространяет множество плагинов в одном реестре. Скопируйте команду установки со страницы нужного инструмента и выполните её в терминале. Большинство устанавливается одной командой.

Для skill реального времени и трекинга сессий установка выглядит так:

claude plugin marketplace add https://github.com/your-skill-author/local-time-skill.git

Или через прямую установку плагина:

claude plugin install local-time-context

Аналогичным образом устанавливается, например, WakaTime-плагин для трекинга времени: установка через claude plugin marketplace add https://github.com/wakatime/claude-code-wakatime.git — одна команда, никакой ручной конфигурации.

Что происходит при установке

После выполнения одной команды:

  1. Claude Code скачивает репозиторий в ~/.claude/plugins/cache/
  2. Регистрирует hooks из папки hooks/ плагина
  3. Копирует skill-файлы в ~/.claude/skills/
  4. При следующем запуске агента — skill уже активен
# Проверка что skill установлен
ls ~/.claude/skills/
# local-time-context/
#   SKILL.md

# Проверка что hook зарегистрирован
cat ~/.claude/settings.json | jq '.hooks'
# {
#   "UserPromptSubmit": [
#     { "type": "command", "command": "~/.claude/hooks/inject-time.sh" }
#   ]
# }

Экосистема доступных инструментов мониторинга

По состоянию на начало мая 2026 года в экосистеме насчитывается более 4200 skills и 770+ MCP-серверов. Среди решений для трекинга времени и сессий — несколько зрелых проектов:

Claude-Code-Usage-Monitor — красивый real-time инструмент для мониторинга токенов Claude AI с продвинутой аналитикой, ML-предсказаниями и Rich UI. Позволяет отслеживать потребление токенов, скорость расхода и стоимость, с умными предсказаниями о лимитах сессий.

ccusage предлагает трекинг стоимости в USD по дням/месяцам/сессиям, поддержку кэш-токенов, офлайн-режим, встроенную интеграцию MCP и поддержку множества часовых поясов.


Трекинг сессий: как это работает изнутри

Помимо времени, skill решает вторую задачу — трекинг сессий. Здесь важно понять, что Claude Code уже сохраняет подробные логи локально.

Claude Code записывает детальные логи использования локально — количество токенов, модели, сессии, проекты — вне зависимости от вашего тарифного плана. Dashboard читает эти логи и превращает их в графики и оценки стоимости.

Claude Code пишет по одному JSONL-файлу на сессию в ~/.claude/projects/. Skill для трекинга сессий читает эти файлы и предоставляет агенту сводку прямо в контексте:

{
  "session_context": {
    "session_id": "sess_A4F2x9",
    "started_at": "2026-05-04T14:00:00+03:00",
    "duration_minutes": 47,
    "tokens_used": 12480,
    "tokens_remaining_estimate": 31520,
    "session_expires_at": "2026-05-04T19:00:00+03:00",
    "local_time": "2026-05-04T14:47:23+03:00"
  }
}

Цикл работы skill


sequenceDiagram
    participant U as Пользователь
    participant CC as Claude Code
    participant H as Hook (inject-time.sh)
    participant S as Skill (SKILL.md)
    participant M as Модель Claude

    U->>CC: Отправляет промпт
    CC->>H: Событие UserPromptSubmit
    H->>H: date, считывает ~/.claude/projects/*.jsonl
    H-->>CC: JSON с local_time + session_context
    CC->>S: Загружает skill если триггер совпал
    CC->>M: Промпт + system_context + skill
    M-->>U: Ответ с реальными временными метками

Ключевой момент: hooks — это скрипты, срабатывающие по событиям в Claude Code. В отличие от промптов, полагающихся на интерпретацию модели, hooks запускают детерминированный код, неспособный к галлюцинациям. Именно поэтому время всегда будет точным — оно берётся из системных часов, а не «угадывается» моделью.

📝 Пример использования

Без skill:

Пользователь: Залогируй начало рефакторинга.
Claude: # Refactoring started at [TIME NOT AVAILABLE]

Со skill:

Пользователь: Залогируй начало рефакторинга.
Claude: # Refactoring started at 2026-05-04 14:47 MSK
         # Session: A4F2x9 | ~47min active | ~31.5k tokens left

Сравнение подходов к трекингу времени и сессий

Существует несколько способов добавить временно́й контекст и трекинг в Claude Code. Сравним их:

ПодходУстановкаТочностьКонтекст в агентеOpen Source
Skill + Hook1 командаТочная (системное время)Да, нативноДа
CLAUDE.md вручнуюРучная правкаНет (статичный текст)ЧастичноN/A
ccusage CLInpx ccusageТочная (из логов)Нет (внешний дашборд)Да
Claude-Code-Usage-Monitorpip installТочнаяНет (отдельный терминал)Да
WakaTime Plugin1 командаТочнаяНет (внешний сервис)Да
OpenTelemetry стекDocker ComposeТочнаяНет (отдельный стек)Да

Видно, что Skill + Hook — единственный подход, который даёт точное время прямо внутри контекста агента, а не в отдельном дашборде. Это принципиальное отличие: агент сам знает время, а не вы смотрите его в другом окне.

💡 Совет по комбинации инструментов
Для одиночного разработчика начните с ccusage для быстрой аналитики использования. Для управления сессиями используйте Claude-Code-Usage-Monitor для живого проактивного трекинга токенов. Для команд разверните claude-code-otel для полной observability. Skill реального времени дополняет любой из этих инструментов, добавляя временно́й контекст внутрь самого агента.

Практика: пишем собственный skill для времени

Если хотите создать аналогичный skill самостоятельно, вот минимальная рабочая реализация:

Шаг 1. Создайте директорию и skill-файл:

mkdir -p ~/.claude/skills/local-time
cat > ~/.claude/skills/local-time/SKILL.md << 'EOF'
---
name: local-time
description: Inject real local time into Claude's context for timestamps and logging.
triggers: [time, timestamp, log, changelog, date, session]
---

Use `system_context.local_time` for all timestamps.
Never guess or approximate the current time.
Always reference session_context for session duration and token estimates.
EOF

Шаг 2. Создайте hook-скрипт:

mkdir -p ~/.claude/hooks
cat > ~/.claude/hooks/time-inject.sh << 'EOF'
#!/bin/bash
TIME=$(date '+%Y-%m-%d %H:%M:%S %Z')
TZ_OFFSET=$(date '+%z')
jq -n --arg t "$TIME" --arg tz "$TZ_OFFSET" \
  '{system_context: {local_time: $t, timezone_offset: $tz}}'
EOF
chmod +x ~/.claude/hooks/time-inject.sh

Шаг 3. Зарегистрируйте hook в настройках:

# Добавьте в ~/.claude/settings.json:
{
  "hooks": {
    "UserPromptSubmit": [
      {
        "type": "command",
        "command": "~/.claude/hooks/time-inject.sh"
      }
    ]
  }
}

Всего три шага — и агент получает точное время при каждом промпте.

Skills — это знание, Hooks — это гарантия. Именно их комбинация превращает Claude Code из умного собеседника в надёжный инструмент производства.


Заключение

Проблема отсутствия реального времени у Claude Code — это не баг, это архитектурная особенность языковых моделей. Но экосистема Skills и Hooks позволяет элегантно закрыть этот пробел без сложной инфраструктуры.

Главные выводы:

  1. Claude Code имеет мощную систему расширений — hooks для lifecycle-автоматизации, subagents для параллельного делегирования задач и skills для переиспользуемых шаблонов поведения.

  2. Skills — это markdown-файлы, доступные без SDK и сборки. В отличие от содержимого CLAUDE.md, тело skill загружается только при вызове, поэтому длинные референсные материалы почти ничего не стоят, пока не нужны.

  3. Hooks детерминированы — они не зависят от того, поняла ли модель инструкцию. Системное время из date всегда точное.

  4. Экосистема огромна: уже более 4200 skills и 770+ MCP-серверов доступны для установки. Большинство устанавливается одной командой.

  5. Локальные логи уже существуют: Claude Code пишет локальные логи использования вне зависимости от типа подписки. Этот инструмент читает их и даёт видимость, которую UI Anthropic не предоставляет.

Если вы работаете с Claude Code ежедневно — добавьте skill реального времени. Это займёт меньше пяти минут, а разница в удобстве работы с агентом ощутима сразу.