# Send ms-todo-sync to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ms-todo-sync",
    "name": "ms-todo-sync",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/xiaoski/ms-todo-sync",
    "canonicalUrl": "https://clawhub.ai/xiaoski/ms-todo-sync",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/ms-todo-sync",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ms-todo-sync",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "pyproject.toml",
      "requirements.txt",
      "scripts/ms-todo-sync.py",
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "ms-todo-sync",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-12T08:37:06.585Z",
      "expiresAt": "2026-05-19T08:37:06.585Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ms-todo-sync",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ms-todo-sync",
        "contentDisposition": "attachment; filename=\"ms-todo-sync-1.0.2.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "ms-todo-sync"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ms-todo-sync"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ms-todo-sync",
    "downloadUrl": "https://openagent3.xyz/downloads/ms-todo-sync",
    "agentUrl": "https://openagent3.xyz/skills/ms-todo-sync/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ms-todo-sync/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ms-todo-sync/agent.md"
  }
}
```
## Documentation

### ms-todo-sync

A Microsoft To Do command-line client for managing tasks and lists via Microsoft Graph API.

### Prerequisites

Python >= 3.9 must be installed.
uv (Python package manager) must be installed. Install via pip install uv or see https://docs.astral.sh/uv/.
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.
Authentication: First-time use requires interactive login via browser. See Authentication section.

Token cache: ~/.mstodo_token_cache.json (persists across sessions, auto-refreshed)
Device flow cache: ~/.mstodo_device_flow.json (temporary)

### First-Time Setup

Before using this skill for the first time, dependencies must be installed:

# Navigate to skill directory
cd <path-to-ms-todo-sync>

# Install dependencies using uv (recommended - creates isolated environment)
uv sync

# Alternative: Install dependencies with pip (uses global/active Python environment)
pip install -r requirements.txt

Dependencies:

Requires msal (Microsoft Authentication Library) and requests
Specified in requirements.txt
uv creates an isolated virtual environment to avoid conflicts

### Environment Verification

After installation, verify the setup:

# Check if uv can find the script
uv run scripts/ms-todo-sync.py --help

# Expected: Command help text should be displayed

Troubleshooting:

If uv: command not found, install uv: pip install uv
If Python not found, install Python 3.9 or higher from https://python.org
If script fails with import errors, ensure dependencies are installed: uv sync or pip install -r requirements.txt

### Security Notes

Uses official Microsoft Graph API via Microsoft's msal library
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

### Command Reference

All commands follow this pattern:

uv run scripts/ms-todo-sync.py [GLOBAL_OPTIONS] <command> [COMMAND_OPTIONS]

### Global Options

OptionDescription-v, --verboseShow detailed information (IDs, dates, notes). Must be placed BEFORE the subcommand.--debugEnable debug mode to display API requests and responses. Useful for troubleshooting. Must be placed BEFORE the subcommand.

⚠️ Common mistake: Global options MUST come before the subcommand.

✅ uv run scripts/ms-todo-sync.py -v lists
✅ uv run scripts/ms-todo-sync.py --debug add "Task"
❌ uv run scripts/ms-todo-sync.py lists -v

### Authentication

Authentication uses a two-step device code flow designed for non-interactive/agent environments.

login get — Get verification code

uv run scripts/ms-todo-sync.py login get

Output example:

✓ Verification code generated

Please visit the following link to log in:
https://microsoft.com/devicelogin

Enter verification code: ABC123XYZ

Verify with command: ms-todo-sync.py login verify

Agent behavior: Present the URL and verification code to the user. Wait for the user to confirm they have completed the browser login before proceeding.

login verify — Complete login

uv run scripts/ms-todo-sync.py login verify

Output on success:

✓ Authentication successful! Login information saved, you will be logged in automatically next time.

Output on failure:

✗ Authentication failed: <error description>

⚠️ This command blocks until Microsoft's server confirms the user completed browser authentication. Do NOT run this until the user confirms they have completed the browser step.

Exit code: 0 on success, 1 on failure.

logout — Clear saved login

uv run scripts/ms-todo-sync.py logout

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

uv run scripts/ms-todo-sync.py lists
uv run scripts/ms-todo-sync.py -v lists  # with IDs and dates

Output example:

📋 Task Lists (3 total):

1. Tasks
2. Work
3. Shopping

create-list — Create a new list

uv run scripts/ms-todo-sync.py create-list "<name>"

ArgumentRequiredDescriptionnameYesName of the new list

Output: ✓ List created: <name>

delete-list — Delete a list

uv run scripts/ms-todo-sync.py delete-list "<name>" [-y]

Argument/OptionRequiredDescriptionnameYesName of the list to delete-y, --yesNoSkip confirmation prompt

⚠️ This is a destructive operation. Without -y, the command will prompt for confirmation. Consider asking the user before deleting important lists.

Output: ✓ List deleted: <name>

### Task Operations

add — Add a new task

uv run scripts/ms-todo-sync.py add "<title>" [options]

OptionRequiredDefaultDescriptiontitleYes—Task title (positional argument)-l, --listNo(default list)Target list name. If not specified, uses your Microsoft To Do default list.-p, --priorityNonormalPriority: low, normal, high-d, --dueNo—Due date. Accepts days from now (3 or 3d) or date (2026-02-15). Note: Only date is supported, not time.-r, --reminderNo—Reminder datetime. Formats: 3h (hours), 2d (days), 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, --recurrenceNo—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). Note: Automatically sets start date.-D, --descriptionNo—Task description/notes-t, --tagsNo—Comma-separated tags (e.g., "work,urgent")

Behavior: If the specified list doesn't exist, it will be automatically created.

Output example:

✓ List created: Work
✓ Task added: Complete report

complete — Mark a task as completed

uv run scripts/ms-todo-sync.py complete "<title>" [-l "<list>"]

OptionRequiredDefaultDescriptiontitleYes—Exact task title-l, --listNo(default list)List name where the task resides. If not specified, uses your default list.

Output: ✓ Task completed: <title>

delete — Delete a task

uv run scripts/ms-todo-sync.py delete "<title>" [-l "<list>"] [-y]

OptionRequiredDefaultDescriptiontitleYes—Exact task title-l, --listNo(default list)List name. If not specified, uses your default list.-y, --yesNo—Skip confirmation prompt

⚠️ This is a destructive operation. Without -y, the command will prompt for confirmation. For routine cleanup or when user intent is clear, -y can be used to avoid blocking.

Output: ✓ Task deleted: <title>

### Task Views

tasks — List tasks in a specific list

uv run scripts/ms-todo-sync.py tasks "<list>" [-a]

OptionRequiredDefaultDescriptionlistYes—List name (positional argument)-a, --allNo—Include completed tasks (default: only incomplete)

Output example:

📋 Tasks in list "Work" (2 total):

1. [In Progress] Write documentation ⭐
2. [In Progress] Review PR

pending — All incomplete tasks across all lists

uv run scripts/ms-todo-sync.py pending [-g]

OptionRequiredDescription-g, --groupNoGroup 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

today — Tasks due today

uv run scripts/ms-todo-sync.py today

Lists incomplete tasks with due date matching today. Output: 📅 No tasks due today if none found.

overdue — Overdue tasks

uv run scripts/ms-todo-sync.py overdue

Output example:

⚠️  Overdue tasks (1 total):

[In Progress] Submit report ⭐
   List: Work
   Overdue: 3 days

detail — View full task details

uv run scripts/ms-todo-sync.py detail "<title>" [-l "<list>"]

OptionRequiredDefaultDescriptiontitleYes—Task title (supports partial/fuzzy match)-l, --listNo(default list)List name. If not specified, uses your default list.

When multiple tasks match, returns the most recently modified incomplete task. If all matches are completed, returns the most recently modified completed task.

search — Search tasks by keyword

uv run scripts/ms-todo-sync.py search "<keyword>"

Searches across all lists in both task titles and notes (case-insensitive).

Output example:

🔍 Search results (1 found):

[In Progress] Write documentation ⭐
   List: Work

stats — Task statistics

uv run scripts/ms-todo-sync.py stats

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

uv run scripts/ms-todo-sync.py export [-o "<filename>"]

OptionRequiredDefaultDescription-o, --outputNotodo_export.jsonOutput file path

Output: ✓ Tasks exported to: <filename>

### Exit Codes

CodeMeaning0Success1Failure (not logged in, API error, invalid arguments, etc.)

### Common Error Messages

ErrorCauseResolution❌ Not logged inNo cached token or token expiredRun login get then login verifyModuleNotFoundError: No module named 'msal'Dependencies not installedRun uv sync or pip install -r requirements.txt❌ List not found: <name>Specified list does not existCheck list name with lists command❌ Task not found: <name>No task with exact matching titleCheck task title with tasks or search❌ Error: <message>API or network errorRetry; check network; use --debug for details

### Critical Rules

Working directory: Always cd to the directory containing this SKILL.md before running commands.
Dependency installation: Before first use or when encountering import errors, run uv sync to ensure all dependencies are installed.
Task list organization: When adding tasks:

First, run lists to see available task lists
If user doesn't specify a list, tasks will be added to their default list (wellknownListName: "defaultList")
Intelligently categorize tasks into appropriate lists (e.g., "Work", "Personal", "Shopping")
If user mentions a context (work, home, shopping, etc.), use or create an appropriate list
Lists will be auto-created if they don't exist, so feel free to use meaningful list names


Destructive operations: For delete and delete-list commands:

These commands will prompt for confirmation by default (blocking behavior)
Use -y flag to skip confirmation 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


Global option placement: -v and --debug must come BEFORE the subcommand, not after.
Do not retry login verify automatically: This command blocks waiting for user browser interaction. Only call it after the user confirms completion.
Check login status first: Before performing any task operations, run a lightweight command (e.g., lists) to verify authentication. Handle the "Not logged in" error gracefully.

### Recommended Workflow for Agents

1. cd <skill_directory>
2. uv sync                                       # Ensure dependencies are installed (first time or after updates)
3. uv run scripts/ms-todo-sync.py lists          # Test auth & see available lists
   → If fails with exit code 1 ("Not logged in"):
     a. uv run scripts/ms-todo-sync.py login get  # Get code
     b. Present URL + code to user
     c. Wait for user confirmation
     d. uv run scripts/ms-todo-sync.py login verify
4. When adding tasks:
   → Analyze task context from user's description
   → Choose or create appropriate list name:
     - Work-related → "Work" list
     - Personal errands → "Personal" list  
     - Shopping items → "Shopping" list
     - Project-specific → Use project name as list
   → Add task with appropriate list via \`-l\` option
5. Verify results (e.g., list tasks after adding)

Example task categorization:

"Buy milk" → Shopping list (or default list if no context)
"Prepare report for meeting" → Work list
"Call dentist" → Personal list (or default list)
"Review PR for auth service" → Work or project-specific list

Note: If no list is specified, tasks are added to the user's default Microsoft To Do list.

### Task Title Matching

complete and delete require exact title match.
detail and search support partial/fuzzy keyword match (case-insensitive).
When in doubt, use search first to find the exact title, then use it in subsequent commands.

### Default List Behavior

When -l is not specified, the tool uses your Microsoft To Do default list (typically "Tasks"). To target a specific list, provide the -l option.

### Quick Examples

# Check existing lists first
uv run scripts/ms-todo-sync.py lists

# Add task to specific list (list auto-created if needed)
uv run scripts/ms-todo-sync.py add "Report" -l "Work" -p high -d 3 -D "Q4 financials"

# Add task to default list (no -l option)
uv run scripts/ms-todo-sync.py add "Buy milk"

# Add task with reminder in 2 hours
uv run scripts/ms-todo-sync.py add "Call client" -r 2h

# Add task with specific reminder date and time
uv run scripts/ms-todo-sync.py add "Meeting" -d 2026-03-15 -r "2026-03-15 14:30"

# Add recurring tasks
uv run scripts/ms-todo-sync.py add "Daily standup" -l "Work" -R daily -d 7
uv run scripts/ms-todo-sync.py add "Weekly review" -R weekly -d 2026-02-17
uv run scripts/ms-todo-sync.py add "Gym" -R weekdays -l "Personal"  
uv run scripts/ms-todo-sync.py add "Monthly report" -R monthly -p high -d 30

# Search then complete (use exact title from search results)
uv run scripts/ms-todo-sync.py search "report"
uv run scripts/ms-todo-sync.py complete "Report" -l "Work"

# Delete (use -y only when user intent is clear)
uv run scripts/ms-todo-sync.py delete "Old task" -y

# Views
uv run scripts/ms-todo-sync.py -v pending -g          # all pending, grouped
uv run scripts/ms-todo-sync.py -v detail "report"      # task detail with fuzzy match
uv run scripts/ms-todo-sync.py export -o "backup.json"  # export all
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: xiaoski
- Version: 1.0.2
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-05-12T08:37:06.585Z
- Expires at: 2026-05-19T08:37:06.585Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/ms-todo-sync)
- [Send to Agent page](https://openagent3.xyz/skills/ms-todo-sync/agent)
- [JSON manifest](https://openagent3.xyz/skills/ms-todo-sync/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/ms-todo-sync/agent.md)
- [Download page](https://openagent3.xyz/downloads/ms-todo-sync)