clauding · git:20261013.4cd1ded · 2026-10-13 · sha256 a4f93fd4a9c00222

clauding git:20261013.4cd1dedA

Immutable. This exact content never changes and is served at /api/v1/blob/a4f93fd4a9c00222.

---
name: clauding
description: Skill se použije, když uživatel zadá "/clauding" (volitelně s režimem day, week nebo month a s obdobím), nebo se ptá, kolik času strávil v Claude Code – za den, týden, měsíc či celou dobu, kolik hodin denně v průměru, který den byl nejdelší, jak se práce rozkládá do dnů v týdnu a hodin dne. Spočítá to z transcriptů všech sessions, z history.jsonl a z vlastních commitů slitých do jednoho proudu událostí, takže souběžné sessions se nesčítají a čekání na Claudovu práci se počítá. Vypíše součet hodin, průměr na kalendářní i na aktivní den po obdobích a k tomu zajímavosti; dny, pro které transcript chybí, odhadne a označí. Na rozdíl od /invoicing recover nehledá čas k fakturaci pro klienta a nic nedoplňuje do timetrackingu. Nic nezapisuje.
argument-hint: [day|week|month] [období]
allowed-tools: [Bash]
---

# Clauding

## Co skill dělá

Spočítá, kolik času se strávilo v Claude Code, a vypíše to po obdobích. Za každé období součet hodin, průměr na kalendářní den, průměr na aktivní den a počet aktivních dnů; pod tabulkou nejdelší den, nejdelší blok v kuse, nejdelší řadu dnů po sobě, rozložení dnů podle počtu hodin, průměr podle dne v týdnu a rozložení podle hodiny dne.

Tři režimy, liší se jen členěním tabulky:

- **`/clauding month`** – po měsících. **Výchozí**, bez období vypíše celou historii.
- **`/clauding week`** – po týdnech od pondělí do neděle.
- **`/clauding day`** – po dnech.

Za režimem volitelně období česky: „září“, „posledních 14 dní“, „od 1. 9.“, „minulý týden“.

## Co skill nedělá

- **Nehledá čas k fakturaci.** Dohledat nenatrackovanou práci pro klienta je `/invoicing recover`. Oba počítají nad týmž jádrem a týmž pravidlem mezery, ale `recover` jen nad projekty jednoho klienta a s commity jako stopou práce i mimo Clauda.
- **Neměří cenu běhu.** Kolik tokenů stojí běh skillu, počítá `skills/cost.py`; tady jde o čas, ne o spotřebu.
- **Neopakuje vestavěný `/stats`.** Ten ukazuje počty zpráv a sessions ze `stats-cache.json`, čas v něm není.
- **Nic nezapisuje** – ani do projektu, ani do timetrackingu.

## Jak je to postavené uvnitř

| Krok | Kdo | Proč zrovna on |
|---|---|---|
| Výklad režimu a období | vlastní | převod české řeči na data je úsudek |
| Proud událostí a intervaly | `skills/timeline.py` | sdílené jádro – totéž pravidlo počítá i `/invoicing recover` |
| Součty, průměry, odhad a zajímavosti | `clauding.py` | deterministický výpočet nad 3–4 GB transcriptů; model by ho dělal pomaleji a s chybou |
| Výpis | vlastní | odpověď na konkrétní dotaz nad tabulkou |

**Oba skripty jsou implementační detail, ne rozhraní** – jejich jména, parametry i rozdělení práce se smějí změnit bez ohlášení. **Závazná je *Metodika* níž a tvar výstupu:** tabulka se součtem a oběma průměry, zajímavosti a značka odhadu. Změna metodiky se dělá v `timeline.py` a v této sekci zároveň, protože jinak by `/clauding` a `/invoicing recover` odpovídaly na tutéž otázku jinak.

## Metodika

Měří se **čas v Claudovi**, ne čas u klávesnice: čekání, než Claude doběhne, je čas strávený s ním.

1. **Události ze všech sessions se slijí do jednoho proudu** a mezery se měří nad ním, ne v každé session zvlášť. Kdo pracuje v několika oknech naráz, má v každém z nich dlouhé mezery, i když celou dobu pracuje – po sessions by se mu nezapočetlo nic.
2. **Událostí je každý záznam s časem**: prompt, Claudova odpověď, výsledek nástroje, odpověď v dialogu, příkaz harnessu, spuštěný hook, záznam subagenta i workflow. Příkaz `/clear` nebo otevření session je stejný doklad, že se v Claudovi něco dělo, jako prompt. Sessions spuštěné přes `claude -p` se počítají taky.
3. **Mezera do 20 minut mezi dvěma sousedními událostmi se počítá celá, delší je pauza.** Hodnota je společná s `/invoicing recover` a drží ji `timeline.GAP`.
4. **Běh příkazu v popředí se započte do výše svého timeoutu** (bez zadaného dvě minuty). Co je v mezeře do jeho výsledku navíc, čekalo na schválení, a pro to platí bod 3 – jinak by se příkaz, který ráno čekal na schválení od večera, započetl jako noc práce.
5. **Vlastní commit je událost, jen když leží do 20 minut od aktivity v Claudovi.** Commit uprostřed práce ji prodlouží; ruční práce v repozitáři mimo Clauda čas v Claudovi není.
6. **Dny se dělí podle pražského času**, interval přes půlnoc se rozdělí.
7. **Den, pro který chybí transcript, se odhadne.** Úklid starých sessions transcripty maže, `history.jsonl` s prompty ne. Pozná se podle skutečného promptu z `history.jsonl`, jehož session transcript nemá (příkaz harnessu typu `/resume` nebo `exit` transcript nezakládá, takže se nepočítá). Na takový den se spočte týmž pravidlem čas jen z promptů a commitů a vynásobí se **koeficientem**: poměrem plné metody a metody jen z promptů na dnech, kde jsou obě sady dat. Koeficient se počítá při každém běhu, takže se s každým dalším dnem zpřesní a nikdy se nerozejde s daty. Chybí-li jen část sessions dne, platí větší z obou hodnot. Odhadnutý den nese značku `~`; rozložení podle hodiny dne a nejdelší blok se z něj nepočítají, protože prompty samy neříkají, kdy Claude doběhl.
8. **Aktivní den** je den s nenulovým časem. Průměr na kalendářní den dělí počtem dnů období, u běžícího jen do dneška; průměr na aktivní den počtem aktivních dnů.

## Fáze 0 – Příprava

Společný začátek je v `~/.claude/skills/preflight.md`. **Body 1 až 3 se vynechávají**: skill nad projektem neběží, pouští se odkudkoliv a nic nezapisuje, takže kořen, kontrakt ani stav pracovního stromu nepotřebuje. Místo nich jediný předpoklad – existuje `~/.claude/projects/` nebo `~/.claude/history.jsonl`. Nejsou-li ani jedno, není z čeho počítat; řekni to a skonči.

## Fáze 1 – Režim a období

Režim vezmi z argumentu. **Chybí-li a období je zadané**, zvol ho podle jeho délky – do 31 dnů `day`, do půl roku `week`, jinak `month`: tabulka pak má rozumný počet řádků. Bez režimu i období platí `month` přes celou historii.

Období převeď na `--since` a `--until` ve tvaru `YYYY-MM-DD`, obě meze včetně. **Dnešní datum vezmi z `date +%F`**, ne z hlavy – „posledních 14 dní“ i „tento měsíc“ se od něj počítají. Příklady:

- „září“ → `--since 2026-09-01 --until 2026-09-30` (rok nejbližšího minulého nebo běžícího září)
- „posledních 14 dní“ → 13 dní zpátky až dnešek
- „minulý týden“ → pondělí až neděle předchozího týdne
- „od 1. 9.“ → jen `--since`

Nejde-li období jednoznačně určit („minule“, „v létě“ bez roku, kde jsou dva kandidáti), zeptej se jednou větou na jeho meze; netipuj, protože tabulka za špatné období vypadá stejně věrohodně jako za správné.

## Fáze 2 – Výpočet

```sh
python3 ~/.claude/skills/clauding/clauding.py <režim> [--since YYYY-MM-DD] [--until YYYY-MM-DD]
```

Běží desítky sekund – čte všechny transcripty. **Selže-li, zastav se a vypiš chybu i s návratovým kódem**; nepočítej nic ručně místo skriptu. Ruční výpočet nad transcripty je přesně ta cesta, na které se ztrácí souběh sessions a čekání na odpověď v dialogu se počítá jako Claudova práce.

## Časté chyby

Ze session, ve které skill vznikl – každá z nich dala věrohodné, ale špatné číslo:

- **Mezery po sessions místo nad společným proudem.** Práce ve dvou oknech střídavě se pak rozpadne na samé pauzy.
- **Čekání na odpověď v dialogu se započte jako Claudova práce.** Otázka, na kterou uživatel odpoví druhý den, by přidala desítky hodin.
- **Commit se počítá bez ohledu na Clauda.** Staré repozitáře pak posunou začátek historie o roky dřív, než Claude existoval.
- **Den se označí za odhad kvůli příkazu harnessu.** `/resume` nebo `exit` v session, která nic nezapsala, transcript nemá – a jediný takový záznam by udělal odhad z celého dne.

## Fáze 3 – Závěr

Výstup skriptu je hotový Markdown. **Vypiš ho beze změny** – nezaokrouhluj jinak, nepřepočítávej a nevynechávej poznámku o odhadu, protože bez ní vypadá odhad jako změřené číslo. Ptal-li se uživatel na konkrétní věc („kolik jsem byl v Claudovi včera“), odpověz nad tabulkou jednou větou s číslem z ní.

Zakonči jednou z těchto vět, nikdy ničím vágním mezi tím:

- `Čas je spočítaný a ověřený skriptem, můžeš se zeptat na jiné období nebo členění.`
- `Čas spočítaný není – brání tomu: <konkrétní seznam>.`