prompt-time
Transcript saat göstermez: uzun bir session'da geriye kaydırdığında bir mesajın ne zaman gönderildiğini ya da modelin onun üzerinde ne kadar çalıştığını anlayamazsın. Bu mod transcript'te senin her mesajının ve modelin cevaplarındaki her metin bloğunun altına soluk bir satırda saati çizer. Resume edilmiş bir session, transcript dosyası 4 MiB ya da daha küçükse eski mesajlarının saatlerini de gösterir.
Ne gösterir
Bugün yazılmış bir mesaj ya da cevap bloğu yalnız saati gösterir. Daha eski olanı yerel saat diliminde tarihi de gösterir:
❯ Say one word, then run date, then say one more word.
22:24
⏺ Start.
22:24
⏺ Bash(date)
⎿ Fri Sep 18 22:24:28 +03 2026
⏺ Done.
22:24
❯ Summarize the log.
17.09.2026 21:58
Satır yalnız görüntüdür. Saklanan mesaj değişmez ve modele hiçbir şey ulaşmaz; yani mod token harcamaz ve prompt cache'e dokunmaz.
Saati nereden bilir
- Senin mesajın.
prompt.submitsaati ve prompt'un metnini kaydeder. Aynı metni taşıyan sonraki yeniUserMessagesatırı o saati alır. Başka bir hook'un düşürdüğü bir prompt hiç çizilmez, saati de hiçbir satıra geçmez. - Bir cevap bloğu. Bir turn çalışırken (
turn.startileturn.completearasında) ilk kez çizilen yeni birAssistantMessagebloğu o çizimin saatini alır. Canlı bir denemede çizim, transcript'in blok için sakladığı timestamp'e 0,1 saniyeden yakındı. - Resume edilmiş bir session. Başlangıçta, resume'da ve fork'ta
classic.SessionStartsession'ın transcript'ini okur ve her user ve assistant satırınınuuid'sinitimestamp'ine eşler. Engine'in bu satırlar için kullandığırequestIdaynıuuid'dir (2.1.277 üzerinde ölçüldü). Okumadan önce çizilmiş satırlar$.ui.invalidateile yeniden çizilir. 4 MiB'ı aşan bir transcript okunmaz, çünkü$.fs.read4 MiB'ı aşan bir dosyayı reddeder ve aralık okuması yoktur; mod boyutu önce$.fs.statile kontrol eder ve debug log'a bir satır yazar. O session'ın satırları saatsiz kalır, bir turn onları yeniden çizdiğinde de (bir resize bütün satırları yeniden çizer); yeni mesajlar ise saatini her zamanki gibi alır. O session'ın bir turn sırasında ilk kez çizilen bir bloğu, fullscreen'de bir kaydırmanın çizdiği gibi, yine turn'ün saatini alır: bir bloğu turn'üne bağlayan hiçbir prop ve hiçbir$.session.messages()satırı yoktur.
/clear bilinen saatleri unutur, çünkü temizlenen mesajlar ekrandan gider.
Kurulum
claude plugin marketplace add KilimcininKorOglu/claude-code-mods
claude plugin install prompt-time@kilimcininkoroglu-mods
Function hook'lar henüz early access aşamasında. Claude Code 2.1.288 ve üzerinde varsayılan olarak yüklenir, açılacak bir ayar yok.
Yerel bir checkout'tan tek session için yüklemek istersen:
claude --plugin-dir plugins/prompt-time
Kurulumdan sonra
Claude Code'u yeniden başlat. Mod transcript'i session başında okur; yani kurulum sırasında açık olan bir session, önceki mesajlarının altında saat göstermez.
Nereye uzanır
Claude Code 2.1.283 üzerinde claude plugin validate ile doğrulandı:
❯ ./register.tsx hooks: classic.SessionStart, prompt.submit, turn.start, turn.complete, ui.render{component=UserMessage}, ui.render{component=AssistantMessage}
❯ ./register.tsx calls: $.clock.now, $.fs.exists (via loadTranscript), $.fs.read (via loadTranscript), $.fs.stat (via loadTranscript), $.ui.invalidate (via loadTranscript), $.ui.log (via loadTranscript), $.ui.resolve (via stamped)
Reach L1: transcript'i okur.
1. Okur: session'ın kendi transcript dosyasının boyutunu, sonra 4 MiB ya da daha küçükse dosyayı başlangıçta, resume'da ve fork'ta bir kere ve yalnız satırlarının type, uuid ve timestamp değerlerini; gönderilen her prompt'un ve çizilen her user satırının metnini, ikisini eşlemek için; saati
2. Çalıştırır: hiçbir şey; process yok, fork yok, timer yok
3. Gönderir: hiçbir şey; network çağrısı yok ve modele hiçbir şey gitmez
4. Saklar: hiçbir şey; saatler bellekte durur ve session'la birlikte gider
5. Düşman girdi: JSON olmayan bir transcript satırı sayılır ve atlanır, string uuid'si ya da parse edilebilir timestamp'i olmayan bir satır atlanır; çizilen etiket yalnız sayılardan kurulur
Sınırlar
- Transcript'i 4 MiB'ı aşan resume edilmiş bir session, önceki mesajlarının altında saat göstermez. Transcript satırı timestamp'ini taşır, ama
$.fs.readdosyanın tamamını reddeder,$.session.messages()da timestamp vermez.~/.claude/projects'te bakılan transcript'lerin 78'i 4 MiB'ı aşıyordu. - Session ortasında yüklenen bir mod, ekranda zaten duran mesajların altında saat göstermez, çünkü transcript'i yalnız session başında okur.
- Bir user satırı prompt'un saatini metin eşleştirerek alır. Engine yeni bir prompt'u iki kez çizer, önce
placeholderolarak, sonra saklanan id'siyle; bu yüzden prompt'un metnini taşıyan her yeni satır, sonraki prompt'a kadar o saati alır. Metni farklı olan bir notification satırı almaz. - Bir cevap bloğu saatini bir turn sırasında ilk kez çizildiğinde alır. Engine bir turn'ün son bloğunu
turn.complete'ten birkaç milisaniye sonra ilk kez çizebilir (2.1.277 üzerinde görüldü); bu yüzden metni turn'ün son metnine eşit olan ilk yeni blok, turn'ün bittiği saati alır. Turn'ü bittikten sonra ilk kez çizilen diğer her blok, session resume edilene kadar saat göstermez. - Bir thinking bloğu saat göstermez. Claude Code 2.1.277'de thinking için bir
ui.renderyeri yoktur, yalnız bir cevabın metin blokları için vardır (AssistantMessage). - Saat, Claude Code'u çalıştıran makinenin yerel saatidir.
claude plugin test'in test engine'iclassic.SessionStart'ı tetikleyemez. Transcript okumasıindexTranscript'in unit test'leri ve canlı bir resume denemesiyle sınandı.
Geliştirme
make install # eslint, typescript-eslint, typescript
make lint # complexity sınırı 10; aşılırsa build kırılır
make typecheck # /plugin-types çıktısı olan .claude/types/ gerekir
make validate
make test # claude plugin test