Blog 2026-02-10

A Tiny Elixir CLI That Nudges Me to Get Things Done

Sometimes the most useful tools are the ones you build for yourself. This post walks through creating a tiny Elixir based CLI todo app that stores tasks in plain Markdown and integrates directly with the shell, turning the terminal into a quiet reminder system without adding noise to your workflow.

I wanted a todo list that stayed out of my way, lived in plain text, and gently reminded me of what I said I’d do. Not another app, not another tab. Just something that fits naturally into my terminal workflow.

So I built a small CLI tool in Elixir.

The idea is simple. Todos are stored as Markdown checkboxes in ~/.todo.md. The tool lets me list tasks, add new ones, mark them as done, or remove them. It’s compiled as a single executable using Mix escript, so it behaves like any normal Unix command. No runtime, no services, no dependencies once built.

What made it interesting was integrating it with the shell.

I added a small shell script that runs when a terminal opens. If it’s been more than an hour since I last saw my todo list, it prints it automatically. While the terminal is open, pressing Enter on an empty prompt will show the list again, but only if another hour has passed. It’s time-based, quiet, and never interrupts real commands.

Cli TODO

This turns the terminal into a soft reminder system. No notifications, no popups, no guilt. Just a quick glance at what matters, exactly where I already work.

Elixir turned out to be a great fit for this. Pattern matching makes the CLI parsing trivial. Immutable data keeps the logic straightforward. And compiling to a single binary makes distribution feel old-school in the best way.

The result is a tiny tool that feels personal, boring, and reliable. Which is exactly what a todo list should be.

Sometimes the best productivity tools are the ones you barely notice, until you stop using them.

GitHub: https://github.com/eringen/todocli

More posts

Keep reading

All posts

No related posts yet.