A modern terminal productivity app that combines task management with a daily journal.
RonDO is a single-binary terminal app for developers who want distraction-free productivity
without leaving their terminal. Tasks, journal, and Pomodoro timer in one keyboard-driven
interface — backed by local SQLite. No accounts, no cloud, no config required.
Task management with subtasks, priorities, and time tracking
Daily journal with timestamped entries and smart date labels
- Install
- Quick Start
- Features
- CLI
- Keyboard Shortcuts
- Data & Config
- Development
- Architecture
- Claude Code Integration
- Changelog
- License
go install github.com/roniel-rhack/rondo/cmd/todo@latestbrew tap roniel-rhack/tap
brew install rondoyay -S rondogit clone https://github.com/roniel-rhack/rondo.git
cd rondo
go build -o rondo ./cmd/todo
mv rondo /usr/local/bin/rondo # Launch the TUI
rondo add "My first task" # Add a task from the CLI
rondo journal "Getting started" # Write a journal entry
rondo list # See all tasksAll data is stored locally at ~/.todo-app/ — no setup needed.
- Full CRUD — create, view, edit, and delete tasks with validated forms
- Subtasks — completion tracking with progress bar
- Status workflow — Pending, In Progress, Done
- Priority levels — Low, Medium, High, Urgent (color-coded)
- Due dates — with overdue detection and sort support
- Tags — comma-separated, filterable
- Metadata — structured key-value pairs (
--meta key=value), filterable with AND logic - Recurring tasks — daily, weekly, monthly, or yearly; auto-spawns next on completion
- Task dependencies — block tasks via
--blocksflag; enriched JSON refs with title and status - Delete guard — refuses to delete tasks that block others;
--cascadeto override - Task notes — timestamped comments on tasks for status updates, blockers, justifications
- Time logging — log time spent with optional notes
- Batch mode — pipe newline-delimited JSON commands to
rondo batch - Sorting — by creation date, due date, or priority
- Fuzzy search — instant filter across tasks
- Pomodoro timer — full work/break cycles with configurable durations
- Work → Short Break → Work → ... → Long Break (4-session sets)
- Phase-aware: work, short break, long break with distinct indicators
- Cycle progress indicator, terminal bell on completion
- Configurable via settings form or
config.json
- Statistics overlay — task counts, priority breakdown, focus sessions, streaks
- Export — Markdown or JSON, with optional journal inclusion
- Undo — revert the last destructive action
- One note per day — auto-created on first entry
- Timestamped entries — each entry records the time
- Edit & delete entries — cursor-based selection
- Hide/restore notes — archive without deleting
- Smart date labels — "Today", "Yesterday", weekday names
- Two-panel layout — list + detail with resizable split
- Four tabs — All, Active, Done, Journal (live counts)
- Vim-style navigation —
j/keverywhere - Context-sensitive status bar — keybinding hints update per panel
- Modal forms — validated input with Dracula theme
- Confirmation dialogs — for all destructive actions
- Help overlay — press
?for the full keybinding reference - Auto backups — daily SQLite backups
Full-featured CLI with styled terminal output (auto-detected), JSON support, and shell completions.
| Flag | Description |
|---|---|
--format table|json|plain |
Output format (default: table) |
--json |
Shorthand for --format json |
-q, --quiet |
Suppress non-essential output |
--no-color |
Disable ANSI colors (auto-detected when piped) |
rondo add "Buy groceries" --priority high --due 2026-03-15
rondo list --status pending --sort priority
rondo done 3
rondo show 3
rondo journal "Productive day"
rondo statsAll CLI commands
# Tasks
rondo add "Buy groceries" --priority high --due 2026-03-15 --tags "home,shopping"
rondo add "Task with context" --meta source=email --meta assigned=john
rondo add "Blocked task" --blocks 1,2 # this task blocks tasks 1 and 2
rondo list --status pending --sort priority --limit 10
rondo list --priority urgent --overdue --format json
rondo list --meta source=email --json # filter by metadata (AND logic)
rondo show 3
rondo edit 3 --title "Buy organic groceries" --due 2026-03-20
rondo edit 3 --meta assigned=jane # merge metadata (adds/overwrites keys)
rondo edit 3 --blocks 4,5 # set tasks this one blocks (replaces)
rondo edit 3 --clear-blocks # remove all blockers
rondo done 3 4 5
rondo delete 3 --force # fails if task blocks others (exit 1)
rondo delete 3 --force --cascade # delete + unblock dependents
rondo status 3 active
# Subtasks
rondo subtask add 3 "Pick up milk"
rondo subtask list 3
rondo subtask done 3 1
# Notes (timestamped comments)
rondo note add 3 "Blocked on vendor API key"
rondo note list 3 # table or --json
rondo note edit 3 1 "Updated: key received"
rondo note delete 3 1 --force
# Time tracking
rondo timelog add 3 1h30m --note "Deep work session"
rondo timelog list 3
rondo timelog summary --days 30
# Recurrence
rondo recur set 3 weekly
rondo recur clear 3
# Journal
rondo journal "Productive day"
rondo journal add "Wrapped up the feature" --date yesterday
rondo journal list
rondo journal show today
# Focus (Pomodoro)
rondo focus start --task-id 3 --duration 25m
rondo focus status
rondo focus stats --days 14
# Batch (multiple commands in one call)
echo '{"cmd":"add","args":["Task 1","--meta","source=api"]}
{"cmd":"done","args":["3"]}' | rondo batch
# Utilities
rondo stats
rondo export --format json --journal --output backup.json
rondo config list
rondo config set focus.work_duration_min 30
rondo completion zshStart here:
ato add,j/kto navigate,sto change status,Tabto switch tabs,?for help.
| Key | Action |
|---|---|
Tab |
Switch tabs |
1 / 2 |
Focus left / right panel |
< / > |
Resize panels |
Esc |
Return to list / clear filter |
? |
Help overlay |
p |
Pomodoro timer |
P |
Pomodoro settings |
G |
Statistics |
X |
Export |
Ctrl+Z |
Undo last action |
q |
Quit |
Panel-specific shortcuts
| Key | Action |
|---|---|
j/k |
Navigate |
a |
Add task |
e |
Edit task |
d |
Delete task |
s |
Cycle status |
t |
Add subtask |
/ |
Search |
F1/F2/F3 |
Sort by created / due / priority |
F4 |
Toggle tag filter bar |
| Key | Action |
|---|---|
j/k |
Navigate subtasks |
a |
Add subtask |
e |
Edit subtask |
d |
Delete subtask |
s |
Toggle subtask |
l |
Log time |
b |
View blockers |
| Key | Action |
|---|---|
j/k |
Navigate notes |
a |
Add entry (today) |
h |
Hide / restore note |
H |
Toggle show hidden |
/ |
Search notes |
| Key | Action |
|---|---|
j/k |
Navigate entries |
a |
Add entry (today) |
e |
Edit entry |
d |
Delete entry |
| Path | Purpose |
|---|---|
~/.todo-app/todo.db |
SQLite database (WAL mode) |
~/.todo-app/config.json |
Persistent settings |
~/.todo-app/backups/ |
Daily auto-backups |
Date/time display is configurable via rondo config (Go time layouts):
rondo config set date_format european
rondo config set time_format 24h
rondo config set datetime_format iso
# Or use custom Go layouts
rondo config set date_format "02.01.2006"
rondo config set time_format "15:04"
rondo config set datetime_format "02.01.2006 15:04"Presets:
date_format:pretty(default),iso,european(eu),ustime_format:12h(default),24hdatetime_format:pretty(default),iso,european(eu),us
Examples:
02.01.2006→31.12.20262006-01-02→2026-12-3103:04 PM→09:07 PM
Requires Go 1.23+.
go build -o rondo ./cmd/todo # Build
go run ./cmd/todo # Run
go test ./... # Test
go vet ./... # Vet
go mod tidy # Tidy depsContributions welcome — please open an issue first for feature discussions.
Architecture
cmd/todo/main.go # Entry point (TUI + CLI dispatch)
internal/
app/
model.go # Main Bubbletea Model + Update + View
model_journal.go # Journal tab handlers
model_forms.go # Form submission + confirmation dialogs
model_overlays.go # Help, stats, blocker overlays + panel renderer
model_tasks.go # Task list helpers (filter, sort, reload, export)
model_features.go # Feature handlers (focus, tags, undo, blockers)
keys.go # Keybinding definitions
styles.go # Lip Gloss styles
delegate.go # Task list item delegate
delegate_journal.go # Journal note list item delegate
cli/
cli.go # Cobra root command + global flags
output.go # Styled output (TTY-aware tables, colors)
errors.go # NotFoundError type
confirm.go # Confirmation prompts
tasks.go # add, done, list, show, edit, delete, status
batch.go # batch (stdin newline-delimited JSON commands)
note.go # note (add, list, edit, delete)
journal.go # journal (add, list, show, edit, delete, hide)
export.go # export (md, json, file output)
subtasks.go # subtask (add, list, done, edit, delete)
timelog.go # timelog (add, list, summary)
recur.go # recur (set, clear)
focus.go # focus (start, status, stats)
stats.go # stats (task + focus summary)
config_cmd.go # config (list, get, set, reset)
completion.go # Shell completion (bash, zsh, fish, powershell)
skill_cmd.go # skill (install, uninstall) for Claude Code
skill_content.go # Embedded SKILL.md content
config/
config.go # JSON config (~/.todo-app/config.json)
database/
db.go # SQLite connection + daily backup
backup.go # Backup rotation logic
export/
export.go # Markdown + JSON export writers
focus/
focus.go # Focus/Pomodoro session model
store.go # Focus session SQLite repository
journal/
journal.go # Note & Entry domain types
store.go # Journal SQLite repository
task/
task.go # Task & Subtask domain types
store.go # Task SQLite repository
deps.go # Task dependency cycle detection
recur.go # Recurring task logic
timelog.go # Time log model
ui/
colors.go # Shared color palette (adaptive light/dark)
views.go # Rendering (tabs, detail, status bar, dialogs)
form.go # Huh form builders
markdown.go # Markdown rendering
overdue.go # Due date classification
stats.go # Sparkline rendering
Follows the Bubbletea MVU (Model-Update-View) pattern. All data persists in a single SQLite database at ~/.todo-app/todo.db (WAL mode, single connection, ON DELETE CASCADE).
RonDO includes a built-in skill for Claude Code, letting Claude manage your tasks, journal entries, and time logs during coding sessions.
rondo skill install # Install globally (~/.claude/skills/)
rondo skill install --project # Install for current project only
rondo skill uninstall # Remove the skillOnce installed, Claude Code automatically uses rondo when you mention tasks, todos, journal entries, or time tracking.
Bubbletea (TUI) · Bubbles (components) · Lip Gloss (styling) · Huh (forms) · Cobra (CLI) · modernc.org/sqlite (database)
See CHANGELOG.md for the full release history.


