taskman is a lightweight and fast command-line tool to manage your tasks directly from the terminal.
Supports priority, status updates, search, sorting, filtered listing, and Google Calendar integration — without needing any GUI or browser.
Inspired by the project idea on roadmap.sh.
The recommended way to install taskman is using uv, which provides fast, isolated installs for CLI tools (similar to pipx, but faster and simpler).
Linux / macOS
curl -Ls https://astral.sh/uv/install.sh | shWindows (PowerShell)
irm https://astral.sh/uv/install.ps1 | iexVerify installation:
uv --versionuv tool install git+https://github.com/bankarsudarshan/task-cli.gittaskman --help🔄 Upgrade
uv tool upgrade taskman🧹 Uninstall
uv tool uninstall taskman🛠 Development install (optional)
If you’re working on the source code:
git clone https://github.com/bankarsudarshan/task-cli.git
cd task-cli
uv sync
source .venv/bin/activate
taskmanRun from anywhere:
taskman [command] [options]| Command | Description |
|---|---|
add <desc> |
Add a new task |
update <id> |
Update task fields |
delete <id> |
Delete a task |
list |
List tasks (with filters & sorting) |
mark-done <id> |
Mark task as done |
mark-in-progress <id> |
Mark task as in-progress |
clear [status] |
Remove tasks |
search <text> |
Search task descriptions |
gcal add <id> |
Add task to Google Calendar |
gcal sync |
Sync tasks with Calendar |
➕ Add Tasks
taskman add "Buy milk"
taskman add "Study DSA" -p highPriority values:
low | medium | high
✏️ Update Tasks
You can update any field independently.
# Change only description
taskman update 1 -d "Finish book - chapter 5"
# Change priority only
taskman update 1 -p high
# Change status only
taskman update 1 -s done
# Update everything
taskman update 1 -d "Final revision" -p high -s done📋 List Tasks (with sorting and filtering)
Filters
# All tasks
taskman list
# Only done tasks
taskman list done
# High priority tasks
taskman list -p high
# Done + high priority
taskman list done -p highSorting
# Sort by priority (high → low)
taskman list --sort-by priority
# Sort newest first
taskman list --sort-by updatedAt --order descSupported sort fields:
id, createdAt, updatedAt, priority, status
Sort order:
--order asc (default)
--order desc
🔄 Updating Task Status
taskman mark-done 1
taskman mark-in-progress 3🧹 Clear Tasks
# Remove all done tasks
taskman clear done
# Remove all tasks
taskman clear🔍 Search Tasks
taskman search "report"
taskman search bookSearches task descriptions (case-insensitive).
All tasks are stored in a file in your home directory:
~/tasks.json
Example structure:
{
"1": {
"id": 1,
"description": "Work on project report",
"status": "in-progress",
"priority": "high",
"createdAt": "2025-11-28 14:25",
"updatedAt": "2025-11-28 18:47",
"dueAt": "2025-12-10 18:00"
}
}Taskman can export tasks with due dates to Google Calendar. This is optional and must be set up once per user.
-
Go to Google Cloud Console
-
Create a New Project
-
Open APIs & Services → Library
-
Enable Google Calendar API
-
Go to OAuth Consent Screen
-
User type: External
-
App name:
Taskman CLI -
Add scope:
https://www.googleapis.com/auth/calendar.events -
Save
-
-
Go to Credentials → Create Credentials → OAuth Client ID
- Application type: Desktop App
- Create
-
Click Download JSON
Rename the downloaded file to:
credentials.json
Create this directory:
mkdir -p ~/.config/taskman/Then move the file here:
mv ~/Downloads/credentials.json ~/.config/taskman/credentials.jsontaskman add "Submit assignment" --due "2025-12-10 18:00"taskman gcal add 1On first run:
- A browser window will open
- Log in to your Google account
- Allow calendar access
- A
token.jsonfile will be created automatically:
~/.config/taskman/token.json
From now on, no further login is needed.
taskman gcal syncThis will export all tasks that contain a dueAt field.
credentials.jsonis never uploaded or sharedtoken.jsonis stored locally only- You should never commit these files to Git
- Each user authenticates with their own Google account
- Add to
.gitignore:
~/.config/taskman/credentials.json
~/.config/taskman/token.json
Found a bug or have ideas? Open an issue here: