Interactive terminal workflow
Launch with the local tm command and work through typed commands instead of numbered menus.
Personal Python project
A command-driven Python task manager with persistent JSON storage, completion tracking, and due-date support.
OneTask CLI
$ tm
> add Finish operating systems assignment
Added task 6: Finish operating systems assignment
> due 6 tomorrow
Set due date for task 6 to 2026-08-02.
> list
Tasks:
[ ] 6: Finish operating systems assignment
(due: 2026-08-02)
> done 6
Marked task 6 as complete: Finish operating systems assignmentI built OneTask to practice Python through a complete project rather than isolated exercises. It gave me a focused place to work through parsing, command routing, persistent data, validation, Git workflows, and incremental development.
I kept the interface command-driven because I wanted a terminal workflow I could use for school and personal tasks—not a large productivity system with more surface area than I needed.
Launch with the local tm command and work through typed commands instead of numbered menus.
Add tasks, list saved work, mark tasks complete with done <id>, and delete by ID or exact text.
Tasks are stored in tasks.json with auto-incrementing IDs and id, text, done, and due fields.
Set due dates to today, tomorrow, a YYYY-MM-DD value, or none, then see them while listing tasks.
Reject empty and whitespace-only task names and provide a help command for the available workflow.
Use tm to launch the program without manually typing python3 main.py.
$ tm
----------------------------------
OneTask CLI
----------------------------------
Type 'help' for a list of commands
> add Finish operating systems assignment
Added task 6: Finish operating systems assignment
> due 6 tomorrow
Set due date for task 6 to 2026-08-02.
> list
Tasks:
[ ] 6: Finish operating systems assignment
(due: 2026-08-02)
> done 6
Marked task 6 as complete: Finish operating systems assignment
> list
Tasks:
[x] 6: Finish operating systems assignment
(due: 2026-08-02)
> exit
Program Saving...... Closing!main.pyStarts the interactive loop and routes commands.parse.pySeparates a command from its arguments.commands.pyContains command behavior such as add, list, done, delete, and due.tasks.jsonStores task data locally, while load/save helpers manage persistence.Change signalCommand functions return whether data changed so the program knows when to save.Foundation
Started with a simple parser and command-routing experiment.
Persistence
Added JSON loading and saving, then task creation, listing, deletion, and completion.
Polish
Improved validation and command help, then tagged the initial v0.1 release.
v0.2
Began due-date support and continued organizing work through GitHub Issues.
Next
Filtering, tags, priorities, search, packaging, and richer terminal formatting remain planned work.
I learned how local history and GitHub fit together through staging, meaningful commits, pulling with rebase, pushing, releases, and resolving a .gitignore conflict.
Keeping generated task data and the Python virtual environment out of Git made it clear which files belong to the program and which belong to a local user session.
Command functions report whether data changed, so the program knows when to save. That kept the interactive loop simple while making updates predictable.
Handling empty input and quoted whitespace early prevented confusing task data without making the command interface complicated.
Small, focused features made room to practice release tagging, issue tracking, documentation, and a Git history built from meaningful commits rather than one large upload.
OneTask is an ongoing personal project, with v0.1 released and v0.2 development underway.
Open OneTask on GitHub ↗