#time-tracking #productivity #github #task-management #time-management

nightly bin+lib tedi

Personal productivity CLI for task tracking, time management, and GitHub issue integration

9 releases (4 breaking)

Uses new Rust 2024

new 0.16.1 Apr 12, 2026
0.15.3 Feb 12, 2026
0.14.1 Feb 2, 2026
0.13.0 Jan 25, 2026
0.12.0 Jan 19, 2026

#2388 in Command line utilities

BlueOak-1.0.0

610KB
13K SLoC

tedi

Minimum Supported Rust Version crates.io docs.rs Lines Of Code
ci errors ci warnings

Personal productivity CLI for task tracking, time management, and GitHub issue integration.

Features

  • Blocker Tree: Stack-based task management with priority tracking. Integrates with Clockify for automatic time tracking.
  • GitHub Issues: Edit GitHub issues locally as markdown/typst files with full sync support (body, comments, sub-issues, state changes).
  • Milestones: Sprint planning with daily/weekly/monthly/quarterly/yearly milestone tracking via GitHub milestones.
  • Manual Stats: Track daily performance metrics (EV, focus time, etc.) with historical data.
  • Performance Evaluation: Screenshot-based productivity tracking with AI analysis.
  • Clockify Integration: Automatic time tracking tied to your current blocker task.

Installation

nix build

Configuration

Create ~/.config/todo/settings.toml:

# Required for GitHub integration
github_token = "ghp_..."

# Required for Clockify integration
clockify_api_key = "..."
clockify_workspace_id = "..."

# Optional
default_extension = "md"  # or "typ" for typst

Usage

# Blocker management (main workflow)
todo blocker add "implement feature X"    # Add a new blocker
todo blocker                              # Open current blocker file in $EDITOR
todo blocker pop                          # Complete current blocker, move to next
todo blocker set projectname              # Switch to different project

# GitHub Issues
todo open https://github.com/owner/repo/issues/123  # Fetch and open issue
todo open -t owner/repo/my-issue                    # Create new issue (touch mode)
todo open pattern                                   # Fuzzy find local issue

# Milestones
todo milestones                           # Show current milestones
todo milestones push "goal description"   # Add goal to current milestone

# Time tracking
todo clockify start                       # Start tracking current blocker
todo clockify stop                        # Stop tracking

# Editor shorthands (inside issue files)
# !n  on title line end: mark issue as pending   (expands to <!-- pending -->)
# !b  on its own line:   insert blockers section (expands to # Blockers)
# !c  on its own line:   insert new comment      (expands to <!-- new comment -->)
# !u  on last line:      undo — abort sync, treat as if no changes were made

# Shell integration (add to your shell rc)
eval "$(todo init zsh)"                   # Or: bash, fish

Tips

Vim Fold Markers

closed issues/sub-issues wrap their content in vim fold markers using {{{always suffix. To auto-close these folds in nvim, add:

vim.opt.foldtext = [[substitute(getline(v:foldstart),'{{{]] .. [[always\s*$','{{{','')]] -- Custom foldtext that strips "always" from fold markers
vim.api.nvim_create_autocmd("BufReadPost", {
	callback = function()
		vim.defer_fn(function()
			vim.cmd([[silent! g/{{]] .. [[{always$/normal! zc]])
		end, 10)
	end,
})

This repository follows my best practices and Tiger Style (except "proper capitalization for acronyms": (VsrState, not VSRState) and formatting). For project's architecture, see ARCHITECTURE.md.

License

Licensed under Blue Oak 1.0.0
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.

Dependencies

~54–77MB
~1M SLoC