Ms Todo Oauth
A robust CLI skill to manage Microsoft To Do tasks via Microsoft Graph API. Supports full task lifecycle management including lists, tasks with priorities, due dates, reminders, recurrence patterns, v
Description
name: ms-todo-oauth description: > A robust CLI skill to manage Microsoft To Do tasks via Microsoft Graph API. Supports full task lifecycle management including lists, tasks with priorities, due dates, reminders, recurrence patterns, views, search, and data export. Includes comprehensive test suite for reliability. THIS IS A REVISED OAUTH2-BASED VERSION OF ms-todo-sync with AI ASSISTANCE. ALL CREDITS TO THE ORIGINAL AUTHOR. metadata: version: 1.0.3 author: yalonghan@gmaill.com license: MIT License tags: [productivity, task-management, microsoft-todo, cli, graph-api, tested] category: productivity tested: true test_coverage: 29 comprehensive tests
ms-todo-oauth
A fully-tested Microsoft To Do command-line client for managing tasks and lists via Microsoft Graph API.
⚠️This is a oauth based script. It contains a generated Azure Client ID and Secret ID
IF YOU WORRIED ABOUT YOUR PRIVACY, CONSIDER REPLACING THEM TO YOUR OWN IN scripts\ms-todo-oauth.py.
Just search for values below:
client_id="ca6ec244……
client_secret="TwQ8Q……
✨ Features
- ✅ Full Task Management: Create, complete, delete, and search tasks
- 🗂️ List Organization: Create and manage multiple task lists
- ⏰ Rich Task Options: Priorities, due dates, reminders, descriptions, tags
- 🔄 Recurring Tasks: Daily, weekly, monthly patterns with custom intervals
- 📊 Multiple Views: Today, overdue, pending, statistics
- 🔍 Powerful Search: Find tasks across all lists
- 💾 Data Export: Export all tasks to JSON
- 🧪 Fully Tested: 29 comprehensive automated tests
- 🌐 Unicode Support: Full support for Chinese characters and emojis
Prerequisites
- Python >= 3.9 must be installed
- Working directory: All commands MUST be run from the root of this skill (the directory containing this SKILL.md file)
- Network access: Requires internet access to Microsoft Graph API endpoints
- Microsoft Account: Personal Microsoft account (Hotmail, Outlook.com) or work/school account
- Authentication: First-time use requires OAuth2 login via browser. See Authentication section
- Token cache:
~/.mstodo_token_cache.json(persists across sessions, auto-refreshed)
- Token cache:
Installation & Setup
First-Time Setup
Before using this skill for the first time, dependencies must be installed:
# Navigate to skill directory
cd <path-to-ms-todo-oauth>
# Create a venv in the project (creates '.venv' folder)
python3 -m venv .venv
# Activate the venv choose based on platforms:
#- Bash/Zsh:
source .venv/bin/activate
# - Fish:
source .venv/bin/activate.fish
# - Windows (PowerShell):
.venv\Scripts\Activate.ps1
pip install --upgrade pip
pip install -r requirements.txt
# Alternative (global python env, not recommended):
# pip install -r requirements.txt
Dependencies:
msal(Microsoft Authentication Library) - Official Microsoft OAuth libraryrequests- HTTP client for API calls- Specified in
requirements.txt
Environment Verification
After installation, verify the setup:
# If using native venv (activate as above):
python3 scripts/ms-todo-oauth.py --help
# Expected: Command help text should be displayed
Troubleshooting:
- If
Python not found, install Python 3.9 or higher from https://python.org
Testing (Optional but Recommended)
Verify all functionality works correctly:
# Run comprehensive automated test suite (29 tests)
python3 test_ms_todo_oauth.py
# Expected: All tests pass (100% pass rate)
See Testing section for details.
Security Notes
- Uses official Microsoft Graph API via Microsoft's
msallibrary - All code is plain Python (.py files), readable and auditable
- Tokens stored locally in
~/.mstodo_token_cache.json - All API calls go directly to Microsoft endpoints (graph.microsoft.com)
- OAuth2 standard authentication flow
- No third-party services involved
Command Reference
All commands follow this pattern:
python3 scripts/ms-todo-oauth.py [GLOBAL_OPTIONS] <command> [COMMAND_OPTIONS]
Global Options
| Option | Description |
|---|---|
-v, --verbose |
Show detailed information (IDs, dates, notes).Must be placed BEFORE the subcommand. |
--debug |
Enable debug mode to display API requests and responses. Useful for troubleshooting.Must be placed BEFORE the subcommand. |
--reauth |
Force re-authentication by clearing the token cache and starting fresh login |
⚠️ Common mistake: Global options MUST come before the subcommand.
- ✅
python3 scripts/ms-todo-oauth.py -v lists- ✅
python3 scripts/ms-todo-oauth.py --debug add "Task"- ❌
python3 scripts/ms-todo-oauth.py lists -v
Authentication
Authentication uses OAuth2 authorization code flow, designed for both interactive and automated environments.
login get — Get OAuth2 authorization URL
python3 scripts/ms-todo-oauth.py login get
Output example:
======================================================================
🔐 OAuth2 Authorization Required
======================================================================
Please visit the following URL to authorize the application:
https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize?...
After authorization, you will be redirected to a callback URL.
Copy the 'code' parameter from the callback URL and run:
ms-todo-oauth.py login verify <authorization_code>
======================================================================
What to do:
- Open the provided URL in your browser
- Sign in with your Microsoft account
- Grant permissions when prompted
- You'll be redirected to a URL like:
http://localhost:8000/callback?code=M.R3_BAY.abc123... - Copy the entire code after
code=(usually a long string starting withM.R3_BAY.)
Agent behavior: Present the URL to the user and explain they need to:
- Visit the URL
- Complete the login
- Copy the authorization code from the callback URL
- Provide it to you
login verify — Complete login with authorization code
python3 scripts/ms-todo-oauth.py login verify <authorization_code>
Example:
python3 scripts/ms-todo-oauth.py login verify "M.R3_BAY.abc123def456..."
Output on success:
✓ Authentication successful!
✓ Login information saved, you will be logged in automatically next time.
Output on failure:
❌ Token acquisition failed
Error: invalid_grant
Description: AADSTS54005: OAuth2 Authorization code was already redeemed...
Exit code: 0 on success, 1 on failure.
Important notes:
- Each authorization code can only be used ONCE
- If verification fails, you need to run
login getagain to get a new code - Once successfully logged in, the token is cached and you won't need to login again unless:
- You run
logout - You run
--reauth - The token expires and cannot be auto-refreshed
- You run
logout — Clear saved login
python3 scripts/ms-todo-oauth.py logout
Output: ✓ Login information cleared
Only use when the user explicitly asks to switch accounts or clear login data. Under normal circumstances, the token is cached and login is automatic.
List Management
lists — List all task lists
python3 scripts/ms-todo-oauth.py lists
python3 scripts/ms-todo-oauth.py -v lists # with IDs and creation dates
Output example:
📋 Task Lists (3 total):
1. 任务
ID: AQMkADAwATYwMAItYTQwZC04OThhLTAwAi0wMAoALgAAA0QJKpxW32BIsIlHaM...
Created: 2024-12-15T08:30:00Z
2. Work
3. Shopping
create-list — Create a new list
python3 scripts/ms-todo-oauth.py create-list "<name>"
| Argument | Required | Description |
|---|---|---|
name |
Yes | Name of the new list (supports Unicode/Chinese) |
Example:
python3 scripts/ms-todo-oauth.py create-list "项目 A"
Output: ✓ List created: 项目 A
delete-list — Delete a list
python3 scripts/ms-todo-oauth.py delete-list "<name>" [-y]
| Argument/Option | Required | Description |
|---|---|---|
name |
Yes | Name of the list to delete |
-y, --yes |
No | Skip confirmation prompt |
⚠️ This is a destructive operation. Without
-y, the command will prompt for confirmation. All tasks in the list will be deleted. Consider asking the user before deleting important lists.
Output: ✓ List deleted: <name>
Exit code: 1 if list not found, 0 on success
Task Operations
add — Add a new task
python3 scripts/ms-todo-oauth.py add "<title>" [options]
| Option | Required | Default | Description |
|---|---|---|---|
title |
Yes | — | Task title (positional argument, supports Unicode/Chinese/emojis) |
-l, --list |
No | (default list) | Target list name. If not specified, uses your Microsoft To Do default list. |
-p, --priority |
No | normal |
Priority:low, normal, high |
-d, --due |
No | — | Due date. Accepts days from now (3 or 3d) or date (2026-02-15). Note: Only date is supported by Microsoft To Do API, not time. |
-r, --reminder |
No | — | Reminder datetime. Formats:3h (hours from now), 2d (days from now), 2026-02-15 14:30 (date+time with space, needs quotes), 2026-02-15T14:30:00 (ISO format), 2026-02-15 (date only, defaults to 09:00). |
-R, --recurrence |
No | — | Recurrence pattern. Formats:daily (every day), weekdays (Mon-Fri), weekly (every week), monthly (every month). With interval: daily:2 (every 2 days), weekly:3 (every 3 weeks), monthly:2 (every 2 months). |
-D, --description |
No | — | Task description/notes (supports multiline with quotes) |
-t, --tags |
No | — | Comma-separated tags/categories (e.g.,"work,urgent") |
--create-list |
No | False | Create the list if it doesn't exist (deprecated, lists auto-create now) |
Auto-created lists: If the specified list doesn't exist, it will be automatically created.
Output example:
✓ Task added: Complete report
With recurrence:
✓ Task added: Daily standup
🔄 Recurring task created
Examples:
# Simple task
python3 scripts/ms-todo-oauth.py add "Buy milk" -l "Shopping"
# High priority task due in 3 days
python3 scripts/ms-todo-oauth.py add "Submit report" -l "Work" -p high -d 3
# Task with reminder in 2 hours
python3 scripts/ms-todo-oauth.py add "Call client" -r 2h
# Task with specific date and time reminder
python3 scripts/ms-todo-oauth.py add "Meeting" -d 2026-03-15 -r "2026-03-15 14:30"
# Daily recurring task
python3 scripts/ms-todo-oauth.py add "Daily standup" -l "Work" -R daily
# Weekday recurring task
python3 scripts/ms-todo-oauth.py add "Gym" -R weekdays -l "Personal"
# Task with all options
python3 scripts/ms-todo-oauth.py add "Project Review" \
-l "Work" \
-p high \
-d 7 \
-r "2026-02-20 14:00" \
-D "Review Q1 deliverables and prepare presentation" \
-t "work,important,meeting"
# Chinese task with emoji
python3 scripts/ms-todo-oauth.py add "🎉 完成项目" -l "任务" -p high
complete — Mark a task as completed
python3 scripts/ms-todo-oauth.py complete "<title>" [-l "<list>"]
| Option | Required | Default | Description |
|---|---|---|---|
title |
Yes | — | Exact task title |
-l, --list |
No | (default list) | List name where the task resides |
Title matching: Requires exact match. If unsure of exact title, use search first.
Output: ✓ Task completed: <title>
Exit code: 1 if task not found, 0 on success
delete — Delete a task
python3 scripts/ms-todo-oauth.py delete "<title>" [-l "<list>"] [-y]
| Option | Required | Default | Description |
|---|---|---|---|
title |
Yes | — | Exact task title |
-l, --list |
No | (default list) | List name where the task resides |
-y, --yes |
No | — | Skip confirmation prompt |
⚠️ Destructive operation. Without
-y, will prompt for confirmation.
Output: ✓ Task deleted: <title>
Exit code: 1 if task not found, 0 on success
Task Views
tasks — List tasks in a specific list
python3 scripts/ms-todo-oauth.py tasks "<list>" [-a]
| Option | Required | Description |
|---|---|---|
list |
Yes | List name (exact match) |
-a, --all |
No | Include completed tasks (default: incomplete only) |
Output example:
📋 Tasks in list "Work" (2 total):
1. [In Progress] Write documentation ⭐
2. [In Progress] Review PR
With -a flag:
📋 Tasks in list "Work" (3 total):
1. [In Progress] Write documentation ⭐
2. [Completed] Submit report
3. [In Progress] Review PR
Exit code: 1 if list not found, 0 on success
pending — All incomplete tasks across all lists
python3 scripts/ms-todo-oauth.py pending [-g]
| Option | Required | Description |
|---|---|---|
-g, --group |
No | Group results by list |
Output example (with -g):
📋 All incomplete tasks (3 total):
📂 Work:
[In Progress] Write documentation ⭐
[In Progress] Review PR
📂 Shopping:
[In Progress] Buy groceries
Without -g:
📋 All incomplete tasks (3 total):
[In Progress] Write documentation ⭐
List: Work
[In Progress] Review PR
List: Work
[In Progress] Buy groceries
List: Shopping
today — Tasks due today
python3 scripts/ms-todo-oauth.py today
Lists incomplete tasks with due date matching today's date.
Output example:
📅 Tasks due today (2 total):
[In Progress] Submit report ⭐
List: Work
[In Progress] Buy groceries
List: Shopping
If no tasks: 📅 No tasks due today
overdue — Overdue tasks
python3 scripts/ms-todo-oauth.py overdue
Lists incomplete tasks past their due date, sorted by days overdue.
Output example:
⚠️ Overdue tasks (1 total):
[In Progress] Submit report ⭐
List: Work
Overdue: 3 days
If no overdue tasks: ✓ No overdue tasks
detail — View full task details
python3 scripts/ms-todo-oauth.py detail "<title>" [-l "<list>"]
| Option | Required | Default | Description |
|---|---|---|---|
title |
Yes | — | Task title (supportspartial/fuzzy match) |
-l, --list |
No | (default list) | List name |
Fuzzy matching: Matches tasks containing the search string (case-insensitive).
When multiple tasks match:
- Prefers incomplete tasks over completed
- Returns most recently modified task
Output example:
============================================================
📌 Task Details
============================================================
📋 Title: Complete Q1 Report
🔖 Status: [In Progress]
⚡ Priority: ⭐ High
📅 Created: 2026-01-15 08:30:00
📝 Modified: 2026-02-10 14:22:00
⏰ Due: 2026-02-20 00:00:00
🔔 Reminder: 2026-02-20 09:00:00
📝 Notes:
- Review sales figures
- Include charts
- Prepare for board meeting
🏷️ Categories: work, important, Q1
🔄 Recurrence:
Every week on Monday
Start date: 2026-02-17
No end date
============================================================
search — Search tasks by keyword
python3 scripts/ms-todo-oauth.py search "<keyword>"
Searches across all lists in both task titles and descriptions (case-insensitive).
Output example:
🔍 Search results for "report" (2 found):
[In Progress] Complete Q1 Report ⭐
List: Work
Notes: Review sales figures...
[Completed] Submit weekly report
List: Work
stats — Task statistics
python3 scripts/ms-todo-oauth.py stats
Shows aggregate statistics across all lists.
Output example:
📊 Task Statistics:
Total lists: 3
Total tasks: 15
Completed: 10
Pending: 5
High priority: 2
Overdue: 1
Completion rate: 66.7%
export — Export all tasks to JSON
python3 scripts/ms-todo-oauth.py export [-o "<filename>"]
| Option | Required | Default | Description |
|---|---|---|---|
-o, --output |
No | todo_export.json |
Output file path |
Exports complete task data from all lists in JSON format.
Output: ✓ Tasks exported to: <filename>
JSON structure:
{
"Work": [
{
"id": "AQMkADAwATYwMAItYTQw...",
"title": "Complete report",
"status": "notStarted",
"importance": "high",
"createdDateTime": "2026-01-15T08:30:00Z",
"dueDateTime": {
"dateTime": "2026-02-20T00:00:00.0000000",
"timeZone": "UTC"
},
"body": {
"content": "Review Q1 numbers",
"contentType": "text"
},
"categories": ["work", "important"]
}
],
"Shopping": [...]
}
Error Handling
Exit Codes
| Code | Meaning |
|---|---|
0 |
Success |
1 |
Failure (not logged in, API error, invalid arguments, resource not found) |
2 |
Invalid command-line arguments |
Common Error Messages
| Error | Cause | Resolution |
|---|---|---|
❌ Not logged in |
No cached token or token expired | Run login get then login verify <code> |
ModuleNotFoundError: No module named 'msal' |
Dependencies not installed | Run pip install -r requirements.txt |
❌ List not found: <name> |
Specified list does not exist | Check list name with lists command. Note: exact match required. |
❌ Task not found: <name> |
No task with exact matching title | Use search to find exact title, or tasks "<list>" to list all tasks |
❌ Error: Invalid isoformat string |
DateTime parsing error | This should not occur in v1.1.0+. If you see this, report as bug. |
❌ Error: Unsupported HTTP method |
Internal API error | This should not occur in v1.1.0+. If you see this, report as bug. |
❌ Error: <API error message> |
Microsoft Graph API error | Retry; check network; use --debug for full details |
Network error / Connection timeout |
No internet or API unreachable | Check network connection; verify access to graph.microsoft.com |
Testing
This skill includes a comprehensive test suite to ensure reliability.
Automated Testing
Run the full test suite:
cd <skill-directory>
python3 test_ms_todo_oauth.py
Prerequisites:
- Must be authenticated (logged in) before running tests
- Internet connection required
- Approximately 2-3 minutes to complete
Test Coverage (29 tests):
- ✅ Authentication (login/logout)
- ✅ List management (create, delete, list)
- ✅ Basic task operations (add, complete, delete, list)
- ✅ Task options (priorities, due dates, reminders, descriptions, tags)
- ✅ Recurring tasks (daily, weekly, weekdays, monthly, custom intervals)
- ✅ Task views (today, overdue, pending, search, stats)
- ✅ Data export and validation
- ✅ Error handling (non-existent resources)
- ✅ Unicode support (Chinese characters, emojis)
Expected output:
========================================================================
TEST SUMMARY
========================================================================
Total tests: 29
Passed: 29
Failed: 0
Pass rate: 100.0%
========================================================================
🎉 ALL TESTS PASSED! 🎉
========================================================================
Manual Testing
For manual verification, see MANUAL_TEST_CHECKLIST.txt which provides:
- Step-by-step test procedures
- Expected outcomes
- 9 test categories covering all functionality
Test Cleanup
The automated test suite:
- Creates a temporary test list (e.g.,
🧪 Test List 14:23:45) - Runs all tests in isolation
- Deletes the test list on completion
- Cleans up any temporary files
If tests are interrupted, you may need to manually delete leftover test lists.
Agent Usage Guidelines
Critical Rules
-
Working directory: Always
cdto the directory containing this SKILL.md before running commands. -
Dependency installation: Before first use or when encountering import errors, ensure all dependencies are installed.
-
Check authentication first: Before any operation, verify authentication status:
python3 scripts/ms-todo-oauth.py listsIf this returns "Not logged in" error (exit code 1), initiate the login flow.
-
Task list organization: When adding tasks:
- First, run
liststo see available task lists - If user doesn't specify a list, tasks will be added to their default list (usually "Tasks" or "任务")
- Intelligently categorize tasks into appropriate lists:
- Work tasks → "Work" list
- Personal errands → "Personal" or default list
- Shopping → "Shopping" list
- Project-specific → Use project name as list
- Lists will be auto-created if they don't exist
- Support Chinese list names and Unicode characters
- First, run
-
Destructive operations: For
deleteanddelete-list:- These commands prompt for confirmation by default (blocking behavior)
- Use
-yflag ONLY when:- User has explicitly requested to delete without confirmation
- The deletion intent is unambiguous and confirmed through conversation
- When in doubt, ask the user for confirmation instead of using
-y - These operations return exit code 1 on failure (resource not found)
-
Global option placement:
-v,--debug, and--reauthmust come BEFORE the subcommand:- ✅
python3 scripts/ms-todo-oauth.py -v lists - ❌
python3 scripts/ms-todo-oauth.py lists -v
- ✅
-
Login flow:
- Do NOT call
login verifyuntil user confirms they've completed browser authentication - Each authorization code can only be used once
- If verify fails, you must run
login getagain for a new code
- Do NOT call
-
Error handling:
- Check exit codes: 0 = success, 1 = failure, 2 = invalid arguments
- Parse error messages to provide helpful guidance
- Use
--debugflag when troubleshooting API issues
Recommended Workflow for Agents
Step 1: Setup and Authentication Check
---------------------------------------
cd <skill_directory>
python3 scripts/ms-todo-oauth.py lists # Test auth & see available lists
If exit code is 1 and output contains "Not logged in":
a. python3 scripts/ms-todo-oauth.py login get
b. Present URL to user
c. Explain: "Visit this URL, login, and copy the 'code' parameter from callback URL"
d. Wait for user to provide authorization code
e. python3 scripts/ms-todo-oauth.py login verify "<code>"
f. Verify success (exit code 0)
Step 2: Task Analysis and List Selection
-----------------------------------------
When user requests to add task(s):
a. Analyze task context from user's description
b. Review available lists (from Step 1 output)
c. Choose appropriate list or use default:
- Work-related → "Work"
- Personal errands → "Personal" or default
- Shopping items → "Shopping"
- Project-specific → "<ProjectName>"
d. If list doesn't exist, it will be auto-created
Step 3: Execute Operation
--------------------------
Add task with appropriate options:
python3 scripts/ms-todo-oauth.py add "Task Title" \
-l "Work" \
-p high \
-d 3 \
-r 2h \
-D "Detailed description" \
-t "tag1,tag2"
Step 4: Verify and Report
--------------------------
Check exit code:
- 0: Success → Confirm to user
- 1: Failure → Parse error, provide guidance
- 2: Invalid args → Fix command syntax
Optionally verify:
python3 scripts/ms-todo-oauth.py tasks "<list>" # Show updated list
Task Title Matching Rules
- Exact match required:
complete,deletecommands - Partial/fuzzy match supported:
detail,searchcommands - Case-insensitive: All search operations
- Best practice: Use
searchfirst to find exact title, then use it in subsequent commands
Example workflow:
# Find task with fuzzy search
python3 scripts/ms-todo-oauth.py search "report"
# Output shows: "Complete Q1 Report"
# Use exact title from search results
python3 scripts/ms-todo-oauth.py complete "Complete Q1 Report" -l "Work"
Default List Behavior
- When
-lis not specified, operations use the Microsoft To Do default list - The default list is typically named "Tasks" (English) or "任务" (Chinese)
- To target a specific list, always provide
-l "<ListName>"
Example Task Categorization
User request: "Add these tasks: buy milk, finish report, call dentist"
Agent approach:
# First check available lists
python3 scripts/ms-todo-oauth.py lists
# Categorize intelligently:
python3 scripts/ms-todo-oauth.py add "Buy milk" -l "Shopping"
python3 scripts/ms-todo-oauth.py add "Finish report" -l "Work" -p high -d 2
python3 scripts/ms-todo-oauth.py add "Call dentist" -l "Personal"
# Or use default list if no specific context: add "Call dentist"
Quick Reference
Common Workflows
Daily task review:
python3 scripts/ms-todo-oauth.py today # Check today's tasks
python3 scripts/ms-todo-oauth.py overdue # Check overdue tasks
python3 scripts/ms-todo-oauth.py -v pending -g # Review all pending, grouped
Adding various task types:
# Simple task (default list)
python3 scripts/ms-todo-oauth.py add "Buy milk"
# Work task with priority and deadline
python3 scripts/ms-todo-oauth.py add "Quarterly review" -l "Work" -p high -d 7
# Task with reminder
python3 scripts/ms-todo-oauth.py add "Call client" -r 3h
# Detailed task with all options
python3 scripts/ms-todo-oauth.py add "Project meeting" \
-l "Work" \
-p high \
-d 2026-03-15 \
-r "2026-03-15 14:30" \
-D "Discuss Q1 goals and resource allocation" \
-t "meeting,important,Q1"
# Recurring tasks
python3 scripts/ms-todo-oauth.py add "Daily standup" -R daily -l "Work"
python3 scripts/ms-todo-oauth.py add "Weekly review" -R weekly -d 7
python3 scripts/ms-todo-oauth.py add "Gym" -R weekdays -l "Personal"
python3 scripts/ms-todo-oauth.py add "Monthly report" -R monthly -p high
Task completion workflow:
# Search for task
python3 scripts/ms-todo-oauth.py search "report"
# Complete using exact title from search results
python3 scripts/ms-todo-oauth.py complete "Quarterly review" -l "Work"
Data management:
# Export for backup
python3 scripts/ms-todo-oauth.py export -o "backup_$(date +%Y%m%d).json"
# View statistics
python3 scripts/ms-todo-oauth.py stats
Changelog
Version 1.1.0 (Current)
- ✅ Fixed: DateTime parsing errors (Microsoft's 7-decimal format)
- ✅ Fixed: HTTP method parameter order bugs
- ✅ Fixed: Missing
start_dateparameter increate_task() - ✅ Fixed: Missing
complete_task()method - ✅ Fixed: Error exit codes now correctly return 1 on failure
- ✅ Added: Comprehensive test suite (29 automated tests)
- ✅ Added: Better error messages and troubleshooting
- ✅ Improved: OAuth2 authentication flow documentation
- ✅ Improved: Unicode and emoji support documentation
- ✅ Improved: Agent usage guidelines
Version 1.0.2 (Previous)
- Initial release with OAuth2 authentication
- Basic task and list management
- Recurring task support
- Multiple task views
- Data export functionality
Troubleshooting
Authentication Issues
Problem: ❌ Not logged in
- Solution: Run
login get, complete browser flow, thenlogin verify <code>
Problem: ❌ Token acquisition failed: invalid_grant
- Cause: Authorization code already used or expired
- Solution: Run
login getagain to get a fresh code
Problem: Login worked but now getting "Not logged in" again
- Cause: Token expired and auto-refresh failed
- Solution: Run
--reauthto force fresh login:python3 scripts/ms-todo-oauth.py --reauth lists
Import/Dependency Issues
Problem: ModuleNotFoundError: No module named 'msal'
- Solution: Install dependencies:
pip install -r requirements.txt
API/Network Issues
Problem: Connection timeout or network errors
- Check: Internet connection
- Check: Can you access https://graph.microsoft.com in browser?
- Try: Using
--debugflag to see full API request/response
Problem: Unexpected API errors
- Try: Re-authenticate:
python3 scripts/ms-todo-oauth.py --reauth lists - Try: Debug mode:
python3 scripts/ms-todo-oauth.py --debug <command>
Task/List Not Found
Problem: ❌ Task not found: <title>
- Solution: Use
searchto find exact title - Note:
completeanddeleterequire exact title match
Problem: ❌ List not found: <name>
- Solution: Run
liststo see exact list names - Note: List names are case-sensitive
Test Failures
Problem: Tests failing with datetime errors
- Solution: Ensure you've applied all v1.1.0 fixes
- Check: Verify
_parse_ms_datetime()helper function exists
Problem: Tests failing with "Not logged in"
- Solution: Authenticate before running tests:
python3 scripts/ms-todo-oauth.py login get # Complete browser flow python3 scripts/ms-todo-oauth.py login verify <code> # Then run tests python3 test_ms_todo_oauth.py
Additional Resources
- Test Suite:
test_ms_todo_oauth.py- Automated tests - Manual Tests:
MANUAL_TEST_CHECKLIST.txt- Step-by-step testing guide - Quick Reference:
QUICK_REFERENCE.txt- Command cheat sheet - Bug Fixes:
COMPLETE_FIX_PATCH.txt- Documentation of v1.1.0 fixes
Support & Contributing
Reporting Issues:
- Provide error message and command used
- Include output from
--debugflag if applicable - Note your Python version:
python3 --version - Note your OS: Windows/Mac/Linux
Testing New Features:
- Always run the test suite after code changes
- Add new test cases to
test_ms_todo_oauth.pyfor new features - Update
MANUAL_TEST_CHECKLIST.txtwith manual test procedures
License
MIT License - See LICENSE file for details
Version: 1.1.0 Last Updated: 2026-02-13 Status: ✅ Fully Tested & Production Ready
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!