A TUI (Terminal User Interface) Kanban board for TODO.md files.
- 📋 Parse TODO.md files with simple list syntax
- 📊 Dynamic columns based on markdown sections (
## Heading) - 🎨 Multiple themes (Dracula, Nord, Monokai, Solarized, etc.)
- ⌨️ Vim-style keybindings (h/j/k/l)
↔️ Move tasks between columns with Shift+Arrow keys- 🏷️ Support for tags (#tag), priority (!P0/!P1/!P2/!P3/!P4), timestamp (~YYYY-MM-DDTHH:MM)
- 💾 Save changes back to TODO.md
- 🌏 Global view - View all projects' tasks from Feishu table
- 🔄 Bi-directional sync - Push to and pull from Feishu table
# Clone or download the repository
cd tuido
# Install in editable mode
pip install -e .# Open TUI Kanban board for TODO.md in current directory (default)
tuido tui
# Create a sample TODO.md file
tuido create
# List tasks (optionally filtered)
tuido list
tuido list --status "Active"
tuido list --tag feature
tuido list --priority P1
# Add a new task
tuido add 'Fix bug #bug !P0'
# Push tasks to Feishu table
tuido push
# Pull tasks from Feishu table
tuido pull
# Use global options (--path and --remote)
tuido --path /path/to/project tui
tuido --path /path/to/project list --status Active
tuido --remote tui # Open remote global view
tuido --remote list # List tasks from remote
tuido --remote add 'Task' # Add task to remote
tuido --path /path/to/project --remote pushGlobal Options:
--path PATH- Path to TODO.md or directory (default: current directory)--remote- Use remote Feishu table (only fortui,list,push,addcommands)
Note: --path and --remote are global options that must be placed before the command.
↑/k- Previous task↓/j- Next task←/h- Previous column→/l- Next column
Shift+↑/Shift+K- Move task up (reorder within column)Shift+↓/Shift+J- Move task down (reorder within column)Shift+←/Shift+H- Move task to left columnShift+→/Shift+L- Move task to right column
a- Add new taskd- Delete taske- Edit taskr- Refresh from files- Save to filet- Switch themeq/Ctrl+C- Quit?- Show help
---
theme: dracula
---
# TODO
## Todo
- Task to do #feature !P1 ~2026-02-28T10:30
- Another task #bug ~2026-02-28T09:00
## Active
- Currently working on ~2026-02-28T14:00
## Done
- Completed task ~2026-02-27T16:30Columns are automatically created from ## headings in your TODO.md file. You can define any columns you need:
## Todo- Tasks to do## Active- Tasks being worked on## Done- Completed tasks
The column order follows the order they appear in the file.
-- Task prefix (required)#tag- Tags (e.g., #feature, #bug, #docs)!P0/!P1/!P2/!P3/!P4- Priority (P0 = highest, P4 = lowest)~YYYY-MM-DDTHH:MM- Last updated timestamp (e.g., ~2026-02-28T14:30)
Task status is determined by which section (## Todo, ## Active, etc.) it belongs to.
Task titles support Markdown-style inline formatting in the TUI:
**bold**or__bold__- Bold text`code`-Code text(cyan color)~~strikethrough~~-Strikethrough text
Examples:
- Implement **bold** and `code` support !P1 #ui
- ~~Deprecated feature~~ will be removed in v2.0
- **Important:** Check `config.yaml` before runningNote: The timestamp is automatically updated when you move or reorder tasks in the TUI, and is synced with Feishu's Timestamp field.
Add configuration at the beginning of your TODO.md:
---
theme: nord
remote:
feishu_api_endpoint: https://open.feishu.cn/open-apis
feishu_table_app_token: your_app_token
feishu_table_id: your_table_id
feishu_table_view_id: your_view_id
---For Feishu integration, create the config file:
theme: dracula
remote:
feishu_api_endpoint: https://open.feishu.cn/open-apis
feishu_table_app_token: your_table_app_token
feishu_table_id: your_table_id
feishu_table_view_id: your_table_view_id
feishu_bot_app_id: your_bot_app_id
feishu_bot_app_secret: your_bot_app_secretView tasks from all projects in a single interface:
# Show global view from Feishu table
tuido tui --remoteConfiguration:
Create ~/.config/tuido/config.yaml with your Feishu credentials (see above).
The global view displays tasks from all projects organized by status columns (Todo, Active, Review, Done).
Push local tasks to Feishu table:
tuido pushFeatures:
- Compares local tasks with remote records
- Shows diff preview before pushing
- Creates new tasks, updates modified ones
- Deletes orphaned remote records
Pull remote tasks from Feishu to local:
tuido pullFeatures:
- Fetches tasks from Feishu for the current project
- Shows diff preview before applying
- Adds new tasks, updates modified ones
- Removes local tasks deleted remotely
- Automatically saves to TODO.md
- Python 3.12+
- textual
- rich
- requests
- pyyaml
- loguru