con un clic
ms-todo
Manage Microsoft To Do tasks via Microsoft Graph API.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Manage Microsoft To Do tasks via Microsoft Graph API.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
Persistent agent memory via OpenViking — store and retrieve context across sessions using a tiered filesystem database. L0/L1/L2 context layers with semantic search.
Windows Task Scheduler — create, list, manage, and delete scheduled tasks for automated workflows, zero dependencies.
Browser integration — open URLs, read bookmarks and history from Edge/Chrome, get active tabs, list downloads, zero dependencies.
Local AI inference via Ollama — run LLMs on-device, manage models, detect NPU/GPU/DirectML hardware, zero cloud dependencies.
System diagnostics — CPU, RAM, battery, GPU, network, processes, OS info via WMI, zero dependencies.
Read and search Windows Sticky Notes — access your notes via the local SQLite database using built-in winsqlite3.dll, zero dependencies.
| name | ms-todo |
| description | Manage Microsoft To Do tasks via Microsoft Graph API. |
| metadata | {"openclaw":{"emoji":"✅","requires":{"bins":["curl"],"env":["MS_TODO_CLIENT_ID","MS_TODO_REFRESH_TOKEN"]},"primaryEnv":"MS_TODO_REFRESH_TOKEN"}} |
Manage Microsoft To Do tasks using the Microsoft Graph API. Works on all platforms.
OpenClaw TodoTasks.ReadWrite and offline_accessRequest a device code:
curl -s -X POST "https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode" \
-d "client_id=$MS_TODO_CLIENT_ID&scope=Tasks.ReadWrite offline_access"
The response will show a user_code and verification_uri. Open the URL in a browser, enter the code, and sign in.
Then poll for the token:
curl -s -X POST "https://login.microsoftonline.com/consumers/oauth2/v2.0/token" \
-d "client_id=$MS_TODO_CLIENT_ID&device_code=DEVICE_CODE_HERE&grant_type=urn:ietf:params:oauth:grant-type:device_code"
Save the refresh_token from the response as MS_TODO_REFRESH_TOKEN.
Add to ~/.openclaw/openclaw.json:
{
skills: {
entries: {
"ms-todo": {
env: {
MS_TODO_CLIENT_ID: "your-azure-app-client-id",
MS_TODO_REFRESH_TOKEN: "your-refresh-token",
},
},
},
},
}
Tokens expire after ~1 hour. Refresh before each session:
ACCESS_TOKEN=$(curl -s -X POST "https://login.microsoftonline.com/consumers/oauth2/v2.0/token" \
-d "client_id=$MS_TODO_CLIENT_ID&refresh_token=$MS_TODO_REFRESH_TOKEN&grant_type=refresh_token&scope=Tasks.ReadWrite offline_access" \
| jq -r '.access_token')
Use $ACCESS_TOKEN in the Authorization header for all commands below.
curl -s "https://graph.microsoft.com/v1.0/me/todo/lists" \
-H "Authorization: Bearer $ACCESS_TOKEN" | jq '.value[] | {id, displayName}'
curl -s "https://graph.microsoft.com/v1.0/me/todo/lists/$LIST_ID/tasks" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
| jq '.value[] | {id, title, status, importance, dueDateTime}'
Filter incomplete tasks:
curl -s "https://graph.microsoft.com/v1.0/me/todo/lists/$LIST_ID/tasks?\$filter=status ne 'completed'" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
| jq '.value[] | {id, title, status, importance, dueDateTime}'
curl -s -X POST "https://graph.microsoft.com/v1.0/me/todo/lists/$LIST_ID/tasks" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Review PR #42",
"importance": "high",
"dueDateTime": {
"dateTime": "2026-02-15T00:00:00",
"timeZone": "Asia/Taipei"
},
"body": {
"content": "Check auth module changes",
"contentType": "text"
}
}' | jq '{id, title, status}'
Minimal create (title only):
curl -s -X POST "https://graph.microsoft.com/v1.0/me/todo/lists/$LIST_ID/tasks" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "Quick task"}' | jq '{id, title}'
curl -s -X PATCH "https://graph.microsoft.com/v1.0/me/todo/lists/$LIST_ID/tasks/$TASK_ID" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"status": "completed"}' | jq '{id, title, status}'
curl -s -X PATCH "https://graph.microsoft.com/v1.0/me/todo/lists/$LIST_ID/tasks/$TASK_ID" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Updated title",
"importance": "high"
}' | jq '{id, title, importance}'
curl -s -X DELETE "https://graph.microsoft.com/v1.0/me/todo/lists/$LIST_ID/tasks/$TASK_ID" \
-H "Authorization: Bearer $ACCESS_TOKEN"
# Returns 204 No Content on success
| Field | Type | Values |
|---|---|---|
title | string | Required for create |
status | string | notStarted, inProgress, completed, waitingOnOthers, deferred |
importance | string | low, normal, high |
body.content | string | Task notes/details |
body.contentType | string | text or html |
dueDateTime.dateTime | string | ISO 8601 (e.g., 2026-02-15T00:00:00) |
dueDateTime.timeZone | string | IANA timezone (e.g., Asia/Taipei, UTC) |
isReminderOn | boolean | Enable/disable reminder |
reminderDateTime | object | Same format as dueDateTime |
offline_access scope to get a refresh token that works indefinitely.$LIST_ID can be found from the "List all task lists" command.jq for readable output; omit jq if not installed.curl is available.