Skip to main content

Minimalist CLI for engineering workdays. Capture time tracking, todos, TILs, and notes as timestamped markdown.

Project description

englog

Minimalist CLI for engineering workdays. Capture time tracking, todos, TILs, and notes as timestamped markdown. Optimized for speed, not processing.

Philosophy

  • Fast capture: Minimal typing, no prompts, no friction
  • Markdown-first: Human-readable, editor-agnostic, greppable
  • Processing elsewhere: Files designed for external tools/editors
  • Daily ephemeral storage: Entries captured during the day, processed end-of-day into permanent systems

Installation

# Clone the repository
git clone https://github.com/jmlrt/englog.git
cd englog

# Install with uv
uv sync

# Or install globally
uv tool install -e .

Setup

# Set up englog directory (optional, defaults to ~/englog)
export ENGLOG_DIR=~/Documents/englog

# Set up editor (required for --edit commands)
export EDITOR=vim  # or nano, code --wait, etc.

# Add to your shell profile for persistence
echo 'export ENGLOG_DIR=~/Documents/englog' >> ~/.zshrc
echo 'export EDITOR=vim' >> ~/.zshrc

# Initialize
englog init

# Optional: create a short alias
echo 'alias el="englog"' >> ~/.zshrc

Quick Start

# Start tracking time
englog time start "Review PRs @code-review"

# Add a todo
englog todo add "Fix auth bug @backend @urgent"

# Capture a learning
englog til "Python dataclasses support frozen=True @python"

# Quick note
englog note "New staging URL: https://staging.example.com @reference"

# Check status
englog status

# Open today's file in editor
englog edit

Commands

Time Tracking

englog time start "task description @tag1 @tag2"   # Start tracking time
englog time start 3                                # Restart timer by number
englog time pause                                  # Pause current timer
englog time resume                                 # Resume paused timer
englog time stop                                   # Stop and log current timer
englog time list                                   # List all timers from today

Features:

  • Auto-stops current timer when starting a new one
  • Restart by number creates a new entry (preserves timeline)
  • Shows total time at bottom of list

Example session:

$ englog time start "Fix auth bug @backend"
Started: Fix auth bug

$ englog time start "Review security PR @code-review"
Stopped: Fix auth bug (1h 23m), Started: Review security PR

$ englog time list
1. Fix auth bug @backend (1h 23m)
2. Review security PR @code-review (45m) [ACTIVE]

Total: 2h 8m

Todo Management

englog todo add "task description @tag1 @tag2"     # Add to todo list
englog todo doing "task description"               # Move to doing by description
englog todo doing 2                                # Move to doing by number
englog todo done "task description"                # Mark as completed
englog todo done 3                                 # Mark as completed by number
englog todo list                                   # List all todos

Features:

  • Match by description (case-insensitive) or by number
  • Numbers only assigned to Todo and Doing sections
  • Direct to done: englog todo done "Quick fix" adds directly if no match

Example session:

$ englog todo add "Fix auth bug @backend"
Added: Fix auth bug

$ englog todo add "Update docs @documentation"
Added: Update docs

$ englog todo list
Todo:
  1. Fix auth bug @backend
  2. Update docs @documentation

$ englog todo doing 1
Doing: Fix auth bug

$ englog todo done 1
Done: Fix auth bug

TIL (Today I Learned)

englog til "quick learning note @tag1 @tag2"       # Single-line TIL
englog til --edit @tag1 @tag2                      # Multi-line TIL (opens $EDITOR)

Capture learnings, techniques, patterns, "aha moments" - knowledge worth remembering.

Notes

englog note "quick note @tag1 @tag2"               # Single-line note
englog note --edit @tag1 @tag2                     # Multi-line note (opens $EDITOR)

Capture important context, references, team updates, URLs, API endpoints.

Scratch

englog scratch "temporary capture @tag1"           # Single-line scratch
englog scratch --edit @tag1                        # Multi-line scratch (opens $EDITOR)

Ultra-ephemeral captures - error messages, debug output, things you need RIGHT NOW.

Utility Commands

englog init                                        # Initialize englog directory
englog status                                      # Show overview
englog edit                                        # Open today's file in $EDITOR
englog version                                     # Show version
englog --help                                      # Show help

Tags

Tags use @tagname format and work consistently across all commands:

englog time start "Fix auth @api-refactor @backend @security"
englog todo add "Review PR @api-refactor @code-review"
englog til "OAuth handles token refresh @api-refactor @security"
englog note "API endpoint: https://api.example.com @api @reference"

Valid tag characters: a-z, A-Z, 0-9, -, _

File Format

All data stored in daily markdown files at $ENGLOG_DIR/YYYY-MM-DD.md:

# 2025-01-15

## Time

### 09:23 - 10:46 | Fix auth endpoints | @api-refactor @backend
- Duration: 1h 23m

### 10:46 - [ACTIVE] | Review security PR | @code-review
- Duration: 45m (running)

## Todo

### Todo
- [14:20] Update documentation @docs @api

### Doing
- [09:45] Fix authentication bug @backend @security

### Done
- [11:30] Deploy staging environment @devops

## TIL

### 10:15 | @python @performance
Python's walrus operator can simplify list comprehensions.

## Notes

### 09:15 | @api @reference
API endpoint: https://api.example.com/v2/users

## Scratch

### 11:00 | @error @debugging
Error output from failed deployment...

End-of-Day Workflow

  1. During the day: Rapid capture with englog commands
  2. End of day: Review with englog status and englog edit
  3. Process entries: Extract to permanent systems (task tracker, knowledge base)
  4. Archive or delete: Daily files are ephemeral by design

Configuration

Variable Description Default
ENGLOG_DIR Directory for daily files ~/englog
EDITOR Editor for --edit and englog edit (required)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

englog-0.1.0.tar.gz (53.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

englog-0.1.0-py3-none-any.whl (17.9 kB view details)

Uploaded Python 3

File details

Details for the file englog-0.1.0.tar.gz.

File metadata

  • Download URL: englog-0.1.0.tar.gz
  • Upload date:
  • Size: 53.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for englog-0.1.0.tar.gz
Algorithm Hash digest
SHA256 509cd19b866bdc84051cccf9cc33fe382f46f4d4bada27605b21c04c3bd8a5ee
MD5 86c594838fdd97c55c50ac05ba4941b5
BLAKE2b-256 2bb50492dec575c1c4db8e1fa26a3dadccbb796c1621dc16dbd4bddca366e0f8

See more details on using hashes here.

File details

Details for the file englog-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: englog-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for englog-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7610bf913a09ea90d1552803935fbbb9ab4a8e56871a3fa2665f4775d3f0e02c
MD5 ed93f902df9c9055c98e3955bc37ec4d
BLAKE2b-256 eba092e197a652c55c8950da262d2db2143dd81c5856059d3551e6c7841fd890

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page