chronoskin

Track your hours without leaving the prompt.

chronoskin is a time tracker that lives in your shell. Start a task, stop it, and print the week as text you can read, pipe or paste into an invoice.

$ brew install chronoskin copy

One binary of 3.1 MB for Linux, macOS and Windows. No account, no daemon, no network.

~/work: chronoskin, 60x17

$ chronoskin start "write the parser" -t compiler
started 09:12  write the parser  #compiler
$ chronoskin status
running  write the parser             00:47:13
$ chronoskin report --week
 day    hours   tracked of 8 h                  
 mon      6.5   ████████████████░░░░
 tue      7.2   ██████████████████░░
 wed      4.1   ██████████░░░░░░░░░░
 thu      0.8   ██░░░░░░░░░░░░░░░░░░
 ------------------------------------------
 total   18.6 h in 3 projects, 11 tasks
note: thursday is still running
$  
  • 12 msto start, cold
  • 3.1 MBone static binary
  • 0libraries it needs
  • 41releases since 2019

commands

commandwhat it doessinceruns in
startBegins a task, and stops the one that was running.1.04 ms
stopEnds the running task and writes one line to the log.1.04 ms
statusPrints what is running and for how long. Made for a prompt.1.23 ms
reportA day, a week or a month as aligned columns, CSV or JSON.2.012 ms
editOpens the log in your editor. It is a text file; fix it by hand.2.46 ms

Every command takes -h help and exits with 0 when it did what you asked. The full reference has all fourteen.

where it fits

01 prompt

In your shell

A status segment for bash, zsh and fish shows the running task beside your path.

02 editor

In your editor

The log is plain text, one line a task. Any editor can open, sort and repair it.

03 pipe

In a pipeline

Reports come as CSV or JSON on standard output, ready for the next program.

04 sync

In your repository

Keep the log beside the code. It merges like any other text file.

news

the log file

Everything chronoskin knows is in one file you can read.

03-02 09:12 10:41 write the parser
03-02 10:55 12:30 review notes
03-02 13:20 -     fix the lexer

A dash means the task is still running. The format fits on one page.

  1. chronoskin
  2. /
  3. docs
  4. /
  5. getting-started

Getting started

Install it, track one task, print one report. Five minutes.

note: this page describes 3.2. Run chronoskin --version to see what you have.

error: versions before 2.0 cannot read a log written by 3.x. Upgrade before you share a file.

Your first tracked hour

chronoskin keeps one text file, the log, and three commands do nearly all the work: start, stop and report. Nothing runs in the background; the clock is the difference between two times in the file.

Install

Pick your system. Each line puts one binary on your path and nothing else.

$ brew install chronoskin
$ chronoskin --version
chronoskin 3.2.0

Track a task

Say what you are doing. Starting a task stops the one before it, so you never have two clocks.

  • chronoskin start "name" begins a task now.
  • chronoskin start -a 09:00 "name" begins it in the past.
  • chronoskin stop ends it and prints how long it ran.

Tags

A word after -t is a tag. A task may carry several; a report can group by any of them.

see also

  1. chronoskin
  2. /
  3. changelog

Changelog

41 releases, newest first. Dates are the day the tag was pushed.

versiondatechangekindlines
3.2.0, 2 March 2026
3.2.003-02report --by tag groups a report by tag.added+412
3.2.003-02A week that crosses a clock change no longer loses an hour.fixed+38
3.2.003-02The --utc flag is gone. Set the zone in the config file.removed-120
3.1.2, 11 January 2026
3.1.201-11status prints nothing, not an error, when no task runs.fixed+9
3.1.201-11Shell completions for fish.added+164
3.1.0, 30 November 2025
3.1.011-30Builds for ARM on Windows.added+21

legend

41 added fixed removed breaking

A count stands on the accent colour. A kind is a word in brackets. A tag marks a release you should read before upgrading.

unreleased

Nothing has been merged since 3.2.0.

propose a change

upgrade

$ chronoskin self-update
3.1.2 -> 3.2.0  ████████████ ok

The old binary is kept beside the new one until the next update.

  1. chronoskin
  2. /
  3. download

Download 3.2.0

Six files and their checksums. Each archive holds one binary and the manual.

filesystemsha256, first 16size
chronoskin-3.2.0-linux-x64.tar.gzLinux, x86-649f2c41d07ab3e5c83.1 MBget
chronoskin-3.2.0-linux-arm64.tar.gzLinux, ARM27d0be6614f9a0c22.9 MBget
chronoskin-3.2.0-macos.tar.gzmacOS, universalc48e19a2f07d3b555.8 MBget
chronoskin-3.2.0-windows-x64.zipWindows, x86-64510af3e7d92c6b183.4 MBget
chronoskin-3.2.0.tar.gzsourcee6b7204c1d8f93aa412 KBget

Check a file with sha256sum -c chronoskin-3.2.0.sha256 before you run it.

release mail

error: that address has no domain ending.

About eight mails a year. Plain text, no tracking.

format:

build it yourself

$ tar xf chronoskin-3.2.0.tar.gz
$ cd chronoskin-3.2.0 && make
$ ./chronoskin --version

A C compiler and make are all it takes. Build notes