Skip to main content

◈ todoc

The most powerful terminal task manager.
Fast, beautiful, and built entirely in your shell.

╭──────────────────────────────────────────────────────────────╮
│                     ◈  T O D O C                             │
│           the most powerful terminal task manager            │
╰──────────────────────────────────────────────────────────────╯

  #   Priority     St   Task                    Tags
 ──────────────────────────────────────────────────────────────
  1  ┃ CRIT ┃  ○  Ship v2.0 release         due:Mon #release
  2  ┃ HIGH ┃  ○  Fix login bug              #bug #backend
  3  ┃ MED  ┃  ✓  Write unit tests           #dev
  4  ┃ LOW  ┃  ○  Update docs                #docs

  1/4  done  ·  3 pending  ·  25%  ████░░░░░░░░░░░░░░░░░░░░░░

PyPI version Python License: MIT GitHub Website


Installation

pip install todoc

Requires Python 3.10+.

Optional extras

pip install todoc[macos]      # rich macOS notifications
pip install todoc[windows]    # Windows desktop notifications
pip install todoc[dev]        # pytest + dev tools

⚠️ macOS notification setup: After pip install todoc[macos]:

brew install terminal-notifier

Then go to System Settings → Notifications → terminal-notifier and enable notifications.


Quick Start

todoc add "Fix login bug" -p high --tags "#bug #backend"
todoc list
todoc done 1
todoc tui          # interactive dashboard
todoc help         # full reference
todoc -s           # compact command summary

All Commands

Command What it does
add Create a new task
list Show all tasks (done + pending)
done Mark one or more tasks complete
undone Reopen a completed task
delete Remove a task permanently
edit Change any field of a task
show Full detail for one task (includes subtasks)
search Full-text search — supports --fuzzy matching
sort Display list sorted by a field
stats Beautiful statistics dashboard
clear Remove all completed tasks
reset ⚠️ Wipe ALL tasks permanently
export Save tasks to JSON or CSV
import Load tasks from a JSON backup
subtask Add a subtask under an existing task
status Move a task between Kanban columns
board Kanban board — To Do / In Progress / Done
tui Interactive TUI dashboard (keyboard-driven)
notify Send desktop notification for urgent tasks
daemon Background auto-notification scheduler
push Sync local tasks → Notion
pull Sync Notion tasks → local
notion-logout Remove saved Notion credentials
help Full command reference

Usage

Adding tasks

todoc add "Buy groceries"
todoc add "Ship v2" -p critical
todoc add "Fix auth" -p high --tags "#bug due:fri @alice"

Priority levels:

Level Chip When to use
critical [ CRIT ] red Drop everything
high [ HIGH ] red Needs to be done soon
medium [ MED ] yellow Normal tasks (default)
low [ LOW ] green Someday / nice to have

Listing & filtering

todoc list                        # all tasks
todoc list --pending              # only unfinished
todoc list --completed            # only finished
todoc list -p high                # filter by priority
todoc list --by priority          # sort: critical → low
todoc list --by priority --desc   # reverse sort

Completing tasks

todoc done 3            # mark #3 done
todoc done 1 4 7        # bulk-complete three at once
todoc undone 3          # reopen #3

Editing tasks

Only passed flags are updated — everything else stays as-is.

todoc edit 3 -p critical
todoc edit 3 --tags "#urgent waiting-for-review"
todoc edit 3 -d "New description" -p high
todoc edit 3 --status doing
todoc edit 3 --tags ""            # clear a field

Subtasks

todoc subtask 1 "Write unit tests" -p medium
todoc subtask 1 "Update changelog" -p low
todoc show 1          # shows parent + all subtasks

Deleting a parent also removes all its subtasks.

Fuzzy Search

todoc search "auth"               # exact match
todoc search "lgin" --fuzzy       # finds "Fix login bug"
todoc search "shp v2" --fuzzy     # finds "Ship v2.0 release"

Kanban Board

todoc board                  # view all columns
todoc status 3 doing         # move #3 to In Progress
todoc status 3 done          # move #3 to Done
todoc status 3 todo          # move back to To Do

Interactive TUI

todoc tui    # requires: pip install textual
Key Action
a Add a new task
e Edit selected task
Space Toggle done / pending
n Cycle status: todo→doing→done
d Delete selected task
/ Fuzzy search
r Refresh
q Quit

Statistics

todoc stats    # counts, progress bar, priority & status breakdowns

Removing tasks

todoc delete 5 --force     # delete immediately
todoc clear                # remove all completed tasks
todoc reset --force        # ⚠ wipe everything

Tip: Run todoc export -o backup.json before reset.

Export & Import

todoc export -o backup.json
todoc export --format csv -o tasks.csv
todoc import backup.json

Desktop Notifications

Notifications fire automatically at 4h, 6h, 9h, 12h, 18h, 24h for every pending task — no terminal needed.

todoc daemon start     # install & start (run once after install)
todoc daemon status    # check if running
todoc daemon stop      # uninstall
todoc notify           # fire manually right now
Platform Mechanism Requires
macOS launchd brew install terminal-notifier
Linux systemd / cron notify-send (usually built-in)
Windows Task Scheduler Run as Administrator

Logs: ~/.todoc/daemon.log


Notion Sync

Sync your tasks to a Notion page with todoc push and pull them back with todoc pull. Credentials are saved once and reused forever.

Setup (one time)

  1. Go to notion.so/my-integrationsNew integration → name it todoc → copy the Internal Integration Token
  2. Open the Notion page you want to sync to → "..." menuConnect to → select todoc
  3. Copy the Page ID from the URL:
    notion.so/My-Page-abc123def456abc123def456abc12345
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 32 chars
    

Usage

todoc push                 # sync local tasks → Notion
todoc pull                 # sync Notion tasks → local (backs up first)
todoc push --reset         # update saved credentials, then push
todoc notion-logout        # remove saved credentials

Note: todoc pull automatically backs up your local tasks to ~/.todoc/tasks_before_pull.json before overwriting.

Credentials are stored at ~/.todoc/notion_creds.json.


Help

todoc help              # full per-command reference with examples
todoc -s                # compact one-screen command summary
todoc <command> --help  # flag list for any single command

Data Storage

~/.todoc/
├── tasks.json
├── notion_creds.json       # saved after first todoc push / pull
├── tasks_before_pull.json  # auto-backup created before todoc pull
├── daemon.log
└── daemon-error.log

No accounts required for local use. Notion sync is opt-in.


Project Structure

todoc/
├── pyproject.toml
├── README.md
└── todoc/
    ├── __init__.py
    ├── __main__.py
    ├── exceptions.py
    ├── cli/
    │   ├── main.py        # CLI entry point
    │   ├── formatter.py   # Rich display layer
    │   ├── tui.py         # Textual TUI dashboard
    │   ├── board.py       # Kanban board renderer
    │   └── daemon.py      # background notification daemon
    ├── core/
    │   ├── models.py      # Task dataclass
    │   └── service.py     # business logic + fuzzy search
    ├── storage/
    │   └── repository.py  # JSON read/write
    └── sync/
        └── notion.py      # Notion API integration (push / pull)

License

MIT — Built with Typer, Rich, and Textual.

Download files

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

Source Distribution

todoc-0.2.1.tar.gz (48.5 kB view details)

Uploaded Source

Built Distribution

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

todoc-0.2.1-py3-none-any.whl (48.5 kB view details)

Uploaded Python 3

File details

Details for the file todoc-0.2.1.tar.gz.

File metadata

  • Download URL: todoc-0.2.1.tar.gz
  • Upload date:
  • Size: 48.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.17

File hashes

Hashes for todoc-0.2.1.tar.gz
Algorithm Hash digest
SHA256 6a082aaed7801c56b5f9099ea4edd28bc530fbe1026f511bcc9241b15e6d7307
MD5 bee185fcd7b3a54f9bd82854ad0224f3
BLAKE2b-256 174d3cd170cbbbc0cba658c2c27aa32cbbfc4653678bbc3d40cf7fe568a12f96

See more details on using hashes here.

File details

Details for the file todoc-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: todoc-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 48.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.17

File hashes

Hashes for todoc-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f166496119cc7a7aa668fd342ed26740e706dddfba611a90b61cb71c36e7f83e
MD5 da29d1416a68a8c6a624c09dfd12cdcf
BLAKE2b-256 e6972220692f0203ef567599209a98eeeb8068de403c2dc922375c8955de811b

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 files

0.2.0

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

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