Log work highlights and lowlights as they happen — so performance reviews aren't a memory test.
Obsidian and Notion are great for notes you plan to write. The problem is that by the time you've switched context, found the right file, and figured out where to put the thing, the moment has passed — and it never gets written.
A text file is closer, but you still have to find it, open it, and maintain some structure yourself.
worklog lives in your terminal: one command, no context switch, no decisions. That gap between "I'll note that later" and "I actually note it" is exactly what it closes.
The example above shows the TUI. See
docs/demo.tapefor the source.
To get started, install worklog.
Capture a highlight the moment it happens:
worklog hl "Delivered the auth refactor two days ahead of schedule"Capture a lowlight just as quickly:
worklog ll "Missed the deploy window on Tuesday"When review season comes around, open the TUI to browse your quarter:
worklogOr export to Markdown for your review doc:
# current quarter
worklog export -o review-q2-2026.md
# Or a full year:
worklog export -y 2025 -o review-2025.mdThat's it. Keep logging as you go, and you'll never walk into a 1:1 empty-handed again.
Note worklog stores its data in a SQLite database at
~/.worklog/worklog.db. Nothing is ever sent over the network.
Use a package manager:
# macOS or Linux
brew install jquiaios/tap/worklogOr install with go (requires Go 1.25+):
go install github.com/jquiaios/worklog/cmd/worklog@latestOr use the install script (detects your OS and architecture automatically):
curl -fsSL https://raw.githubusercontent.com/jquiaios/worklog/main/install.sh | shTo pin a specific version or choose a different install directory:
WORKLOG_VERSION=0.2.0 curl -fsSL https://raw.githubusercontent.com/jquiaios/worklog/main/install.sh | sh
WORKLOG_INSTALL_DIR=~/.local/bin curl -fsSL https://raw.githubusercontent.com/jquiaios/worklog/main/install.sh | shOr download a pre-built binary directly from the Releases page for Linux, macOS (Intel + Apple Silicon), or Windows.
macOS note: If you installed via the script or downloaded directly (not Homebrew), Gatekeeper may block the first run. Remove the quarantine flag once:
xattr -d com.apple.quarantine /usr/local/bin/worklog
The CLI is designed to be fast enough that logging an entry never breaks your flow.
All of the following are equivalent:
worklog highlight "Won the sprint demo with the client"
# or
worklog hl "Won the sprint demo with the client"
# or
worklog add highlight "Won the sprint demo with the client"
# or
worklog add hl "Won the sprint demo with the client"The same shorthands apply to lowlights (lowlight, ll, add lowlight, add ll).
worklog list # all entries, newest first
worklog list -t hl # highlights only
worklog list --type lowlight # lowlights onlyOutput:
#4 2026-04-18 [highlight] Won the sprint demo with the client
#3 2026-04-17 [lowlight] Broke prod on Friday afternoon
worklog delete 3
worklog rm 3 # shorthandworklog export # current quarter, printed to stdout
worklog export -o review.md # write to file instead
worklog export -q Q1 # specific quarter (current year)
worklog export -q Q4 -y 2025 # specific quarter of a past year
worklog export -y 2025 # full year (entries grouped by quarter)
worklog export -y 2025 -o 2025.md # full year, written to fileExports are plain Markdown with Highlights and Lowlights sections. Full-year exports add ### Q1 2025 subheadings inside each section.
Run worklog with no arguments to launch the TUI — a two-column view scoped to the current quarter by default.
See
docs/tui.tapefor the source.
Navigation
| Key | Action |
|---|---|
tab |
Switch between Highlights and Lowlights |
[ |
Previous quarter |
] |
Next quarter |
a |
Show all entries (no period filter) |
Actions
| Key | Action |
|---|---|
n |
New entry in the focused column |
e |
Edit selected entry |
d |
Delete selected entry (asks for confirmation) |
x |
Export current period to Markdown file |
/ |
Filter entries in the focused column |
q |
Quit |
Prefer a browser? worklog serve starts a local web UI that mirrors the TUI's two-column layout and auto-refreshes every 3 seconds — so entries added from the CLI or TUI appear without reloading.
worklog serve # opens http://localhost:7171 in your browser
worklog serve -p 8080 # use a different port if 7171 is taken
worklog serve --no-open # start without opening the browserEntries live in a SQLite database at ~/.worklog/worklog.db. It's local, private, and yours — you can back it up, copy it to another machine, or open it with any SQLite client.
- Bubble Tea — TUI framework
- Lip Gloss — TUI styling
- Bubbles — TUI components
- Cobra — CLI framework
- modernc/sqlite — Pure-Go SQLite driver
Issues and pull requests are welcome. See CONTRIBUTING.md for development setup and guidelines.


