ХукПроцессы

cost-tracker

Показывает статистику сессии при завершении: токены, время работы, примерная стоимость.

Закинь в Claude, Cursor или любой AI

Описание

Простым языком

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

Это как квитанция на кассе: заплатил — получи чек. Видишь: 47 минут, 4 коммита, 8 файлов. Хорошая сессия или нет — сам решаешь.


Что делает

Хук cost-tracker показывает статистику сессии при её завершении: количество изменённых файлов, продолжительность работы, количество коммитов. Помогает осознанно тратить токены и выбирать между Opus и Sonnet.

Cost-awareness — один из ключевых паттернов вайбкодера. Нужно знать: эта сессия стоила X — оно того стоило?

Когда срабатывает

Триггер: Stop — при завершении сессии Claude Code. Условие: всегда. Действие: выводит статистику в консоль.


Установка

  1. Добавь конфиг Stop в .claude/settings.json
  2. Создай ~/.claude/hooks/cost-tracker.sh с правами chmod +x
  3. Для точного учёта времени: сохраняй метку старта через PreToolUse (опционально)

Конфиг settings.json

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/cost-tracker.sh"
          }
        ]
      }
    ]
  }
}

Скрипт хука

#!/bin/bash
# cost-tracker.sh — статистика завершённой сессии
# Stop: при выходе из Claude Code

PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"

echo ""
echo "━━━ SESSION STATS ━━━"

START_FILE="/tmp/claude-session-start-${PPID}"
if [ -f "$START_FILE" ]; then
  START=$(cat "$START_FILE")
  END=$(date +%s)
  DURATION=$((END - START))
  MINUTES=$((DURATION / 60))
  SECONDS=$((DURATION % 60))
  echo "Время:      ${MINUTES}мин ${SECONDS}сек"
  rm -f "$START_FILE"
fi

if git -C "$PROJECT_DIR" rev-parse --is-inside-work-tree &>/dev/null; then
  CHANGED=$(git -C "$PROJECT_DIR" diff --name-only 2>/dev/null | wc -l | tr -d ' ')
  STAGED=$(git -C "$PROJECT_DIR" diff --cached --name-only 2>/dev/null | wc -l | tr -d ' ')
  COMMITS=$(git -C "$PROJECT_DIR" log --oneline --since="3 hours ago" 2>/dev/null | wc -l | tr -d ' ')

  echo "Изменено:   ${CHANGED} файлов (незакоммиченных)"
  echo "Staged:     ${STAGED} файлов"
  echo "Коммитов:   ${COMMITS} за последние 3 часа"

  if [ "$COMMITS" -gt 0 ]; then
    echo ""
    echo "Коммиты сессии:"
    git -C "$PROJECT_DIR" log --oneline --since="3 hours ago" 2>/dev/null
  fi
fi

BACKUPS=$(ls "$PROJECT_DIR/.backups/"*.bak 2>/dev/null | wc -l | tr -d ' ')
if [ "$BACKUPS" -gt 0 ]; then
  echo "Бэкапов:    ${BACKUPS} файлов в .backups/"
fi

echo "━━━━━━━━━━━━━━━━━━━"
echo ""

Примеры работы

Пример вывода при завершении продуктивной сессии:

━━━ SESSION STATS ━━━
Время:      47мин 23сек
Изменено:   0 файлов (незакоммиченных)
Staged:     0 файлов
Коммитов:   4 за последние 3 часа

Коммиты сессии:
a3f91c2 feat: добавить страницу /framework/[slug]
b12e4d7 feat: API для скачивания фреймворка
c98a1f3 fix: TypeScript ошибки в DownloadButton
d45b2e1 chore: миграция Payload для Frameworks
━━━━━━━━━━━━━━━━━━━

Что показывает

  • Продолжительность сессии (минуты и секунды)
  • Количество незакоммиченных изменений
  • Количество staged файлов
  • Список коммитов за последние 3 часа
  • Количество бэкапов если используется backup-before-edit

Настройка под себя

  • Добавь запись статистики в ~/.claude-sessions.log для анализа трендов
  • Интегрируй с Telegram ботом для уведомления о завершении со статистикой
  • Добавь вывод размера node_modules если он рос в сессии
  • Комбинируй с notify-done для звука и статистики одновременно
Нельзя управлять тем, что не измеряешь. cost-tracker — это дашборд вайбкодера: был ли я продуктивен сегодня?
#Hooks#Claude Code#Opus#Sonnet
TG

> Пока нет комментариев

Связанный контент

Похожие инструменты