[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FZFF13Z1JV231SSGCEJDWC":3,"skill-same:01M6FZFF13Z1JV231SSGCEJDWC":80},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M6FZFF13Z1JV231SSGCEJDWC","outlook-web",null,"Access Outlook Web for email and calendar operations - reading, composing (as drafts by default), searching, and managing emails and calendar events. Use when the user needs to check email, draft messages, search inbox, view calendar, or manage their Outlook mailbox.","kbarbel640-del\u002Fskills","kbarbel640-del","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F255315490?v=4","01M6CJPPQGCCESXMG3K7BBGQ5J","01M6CJPPX2PB2BCZERFVM2C2B3",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Forganisciak\u002Foutlook-web\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000005","邮件与沟通","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"web","outlook web","outlook","calendar","cli","drafts","reading","events","as","emails","manage","default","search","use","view","access","Bash","inbox","messages","email","2026-11-10 10:12:30",false,"---\nname: outlook-web\ndescription: Access Outlook Web for email and calendar operations - reading, composing (as drafts by default), searching, and managing emails and calendar events. Use when the user needs to check email, draft messages, search inbox, view calendar, or manage their Outlook mailbox.\nallowed-tools: Bash(playwright-cli:*)\n---\n\n# Outlook Web Access Skill\n\nThis skill provides access to Outlook Web (outlook.office.com) via playwright-cli with persistent session management.\n\n## Session Configuration\n\n**All commands must use**: `--session=outlook-web`\n\nThis ensures cookies and authentication persist between commands.\n\n## First-Time Authentication\n\nMicrosoft login requires manual intervention. Follow these steps for first-time setup:\n\n### Step 1: Open Outlook in headed mode to trigger login\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web --headed\n```\n\nThe browser will open visibly and redirect to Microsoft login. **Tell the user to complete login manually** in the opened browser window.\n\n### Step 2: Verify authentication\nAfter user confirms login is complete:\n```bash\nplaywright-cli snapshot --session=outlook-web\n```\n\nIf successful, the snapshot will show inbox content (email subjects, folders). If it shows a login form, authentication is not complete.\n\n**Note**: After initial authentication, subsequent commands can run headless (default) since the session cookies persist.\n\n## Detecting Session Expiry\n\nMicrosoft sessions expire after ~7-14 days. Signs of expiry:\n- Snapshot shows login form instead of inbox\n- Navigation redirects to login URL\n\n**To re-authenticate**: Open Outlook in headed mode again:\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web --headed\n```\nComplete the login manually in the browser window.\n\n## Key URLs\n\n```\nBase: https:\u002F\u002Foutlook.office.com\n\nEmail:\n- \u002Fmail\u002Finbox           - Inbox\n- \u002Fmail\u002Fdrafts          - Drafts folder\n- \u002Fmail\u002Fsentitems       - Sent folder\n- \u002Fmail\u002Fdeleteditems    - Deleted\u002FTrash\n- \u002Fmail\u002Farchive         - Archive\n- \u002Fmail\u002Fjunkemail       - Junk\u002FSpam\n- \u002Fmail\u002Fsearch?q=TERM   - Search results\n- \u002Fmail\u002Fdeeplink\u002Fcompose - New email composer\n\nCalendar:\n- \u002Fcalendar             - Calendar view\n- \u002Fcalendar\u002Fview\u002Fday    - Day view\n- \u002Fcalendar\u002Fview\u002Fweek   - Week view\n- \u002Fcalendar\u002Fview\u002Fmonth  - Month view\n```\n\n## Email Operations\n\n### View Inbox\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\n### Read an Email\nNavigate to inbox, then click on an email row to select it:\n```bash\nplaywright-cli click \"EMAIL_SUBJECT_OR_SELECTOR\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\nThe reading pane will show the email content.\n\n### Compose New Email (Draft by Default)\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Fdeeplink\u002Fcompose\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\nFill in fields:\n```bash\n# Add recipient\nplaywright-cli fill \"[aria-label='To']\" \"recipient@example.com\" --session=outlook-web\n\n# Add subject\nplaywright-cli fill \"[aria-label='Add a subject']\" \"Subject line\" --session=outlook-web\n\n# Add body (the editor area)\nplaywright-cli fill \"[aria-label='Message body']\" \"Email content here\" --session=outlook-web\n```\n\n**IMPORTANT**: By default, save as draft instead of sending:\n```bash\n# Save as draft (Ctrl+S or close the compose window)\nplaywright-cli keyboard \"Control+s\" --session=outlook-web\n```\n\nOnly send if user explicitly requests:\n```bash\n# Send email (only when explicitly requested by user)\nplaywright-cli click \"[aria-label='Send']\" --session=outlook-web\n```\n\n### Reply to an Email\n\n**Method 1: Via Reading Pane (Simple)**\n\nWith an email open in the reading pane:\n```bash\n# Click Reply button\nplaywright-cli click \"[aria-label='Reply']\" --session=outlook-web\n\n# Fill reply message\nplaywright-cli fill \"[aria-label='Message body']\" \"Your reply text here\" --session=outlook-web\n\n# Save as draft (auto-saves, or use Ctrl+S)\nplaywright-cli press \"Control+s\" --session=outlook-web\n```\n\n**Method 2: Complete Reply Flow**\n\nFrom inbox to draft reply:\n```bash\n# 1. Navigate to inbox\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web\n\n# 2. Click the email (get ref from snapshot)\nplaywright-cli snapshot --session=outlook-web\nplaywright-cli click \u003Cemail-ref> --session=outlook-web\n\n# 3. Click Reply button\nplaywright-cli snapshot --session=outlook-web\nplaywright-cli click \u003Creply-button-ref> --session=outlook-web\n\n# 4. Fill reply\nplaywright-cli fill \u003Cmessage-body-ref> \"Your reply message\" --session=outlook-web\n\n# 5. Save draft (Ctrl+S or Escape)\nplaywright-cli press \"Control+s\" --session=outlook-web\n```\n\n**Method 3: Fast Batch Reply**\n\nUsing run-code for speed:\n```bash\nplaywright-cli run-code \"\n  await page.goto('https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox');\n  await page.getByRole('option').first().click();\n  await page.getByRole('button', { name: 'Reply', exact: true }).click();\n  await page.getByRole('textbox', { name: 'Message body' }).fill('Your reply');\n  await page.keyboard.press('Control+s');\n\" --session=outlook-web\n```\n\n**Note:** Replies are auto-saved as drafts and have \"Re: [Original Subject]\" format.\n\n### Forward an Email\n```bash\nplaywright-cli click \"[aria-label='Forward']\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n# Add recipient and content\n```\n\n### Delete an Email\nWith an email selected:\n```bash\nplaywright-cli click \"[aria-label='Delete']\" --session=outlook-web\n```\n\n### Search Emails\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Fsearch?q=YOUR_SEARCH_TERM\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\nOr use the search box:\n```bash\nplaywright-cli click \"[aria-label='Search']\" --session=outlook-web\nplaywright-cli fill \"[aria-label='Search']\" \"search query\" --session=outlook-web\nplaywright-cli keyboard \"Enter\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\n### Navigate Folders\n```bash\n# Drafts\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Fdrafts\" --session=outlook-web\n\n# Sent\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Fsentitems\" --session=outlook-web\n\n# Deleted\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Fdeleteditems\" --session=outlook-web\n```\n\n## Calendar Operations\n\n### View Calendar\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fcalendar\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\n### View Specific Time Range\n```bash\n# Day view\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fcalendar\u002Fview\u002Fday\" --session=outlook-web\n\n# Week view\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fcalendar\u002Fview\u002Fweek\" --session=outlook-web\n\n# Month view\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fcalendar\u002Fview\u002Fmonth\" --session=outlook-web\n```\n\n### View Event Details\nClick on an event in the calendar view:\n```bash\nplaywright-cli click \"EVENT_TITLE_OR_SELECTOR\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\n## Best Practices\n\n1. **Always snapshot after navigation** - Outlook loads asynchronously; snapshot confirms content is ready\n2. **Wait if needed** - If snapshot shows loading state, wait and snapshot again:\n   ```bash\n   playwright-cli wait 2000 --session=outlook-web\n   playwright-cli snapshot --session=outlook-web\n   ```\n3. **Use ARIA labels** - Outlook has good ARIA labeling; prefer `[aria-label='...']` selectors\n4. **Check for errors** - If an operation fails, snapshot to see current state\n5. **Default to drafts** - Never send emails without explicit user confirmation\n\n## Advanced Usage & Optimizations\n\n### Batch Operations with run-code\n\nFor faster programmatic operations, batch multiple commands using `run-code`:\n\n```bash\nplaywright-cli run-code \"\n  \u002F\u002F Open inbox and reply to first email\n  await page.goto('https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox');\n  await page.getByRole('option').first().click();\n  await page.getByRole('button', { name: 'Reply', exact: true }).click();\n  await page.getByRole('textbox', { name: 'Message body' }).fill('Your reply text');\n  await page.keyboard.press('Control+s');\n\" --session=outlook-web\n```\n\n**Benefits:** 60-70% faster than individual commands, single process invocation.\n\n### Direct Email Navigation\n\nIf you have an email ID (from URL or previous snapshot), navigate directly:\n\n```bash\n# Instead of: inbox → find → click\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\u002Fid\u002FAAQkAGMxODI1MWVlLTgy...\" --session=outlook-web\n```\n\nEmail IDs are found in URLs when emails are open: `\u002Fmail\u002Finbox\u002Fid\u002F\u003CEMAIL_ID>`\n\n### Skip Unnecessary Snapshots\n\nFor programmatic use, only snapshot when you need to extract data:\n\n```bash\n# Fast: No intermediate snapshots\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web\nplaywright-cli click e600 --session=outlook-web\nplaywright-cli click \"Reply\" --session=outlook-web\nplaywright-cli fill \"Message body\" \"Text\" --session=outlook-web\n# Only snapshot if you need to verify or extract data\n```\n\n### Resource Blocking for Speed (Advanced)\n\nBlock images, fonts, and analytics to speed up page loads by 30-50%:\n\n```bash\nplaywright-cli run-code \"\n  \u002F\u002F Block non-essential resources\n  await page.route('**\u002F*', (route) => {\n    const url = route.request().url();\n    if (url.includes('browser.events.data.microsoft.com') ||\n        url.includes('csp.microsoft.com') ||\n        url.match(\u002F\\\\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf)$\u002F)) {\n      route.abort();\n    } else {\n      route.continue();\n    }\n  });\n\n  \u002F\u002F Then navigate\n  await page.goto('https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox');\n\" --session=outlook-web\n```\n\n**Note:** Test thoroughly as blocking resources may affect functionality.\n\n### Trust Auto-Save\n\nOutlook Web auto-saves drafts every few seconds. For programmatic workflows:\n- Skip navigating to drafts folder for verification\n- Trust that draft saved if no error occurred\n- Only verify when explicitly needed\n\n### Efficient Content Extraction for LLMs\n\n**Problem:** Full page snapshots include 60-95% UI chrome (toolbars, navigation, wrappers) and only 5-40% actual content.\n\n**Solution:** Use `run-code` to extract just the text you need:\n\n```bash\n# Extract email list as text (no YAML overhead)\nplaywright-cli run-code \"\n  const listbox = await page.locator('[role=\\\"listbox\\\"]');\n  return await listbox.innerText();\n\" --session=outlook-web\n```\n\n```bash\n# Extract just message body text\nplaywright-cli run-code \"\n  const body = await page.locator('[role=\\\"document\\\"]').first();\n  return await body.innerText();\n\" --session=outlook-web\n```\n\n```bash\n# Extract structured data as JSON\nplaywright-cli run-code \"\n  const emails = await page.locator('[role=\\\"option\\\"]')\n    .evaluateAll(opts => opts.slice(0, 10).map(o => ({\n      text: o.textContent.trim(),\n      unread: o.textContent.includes('Unread')\n    })));\n  return JSON.stringify(emails, null, 2);\n\" --session=outlook-web\n```\n\n**Benefits:**\n- 70-90% reduction in tokens\n- Faster LLM processing\n- Cleaner output (text or JSON vs YAML)\n\n**When to use:**\n- Full snapshots: Interactive exploration, getting element refs\n- Text extraction: Reading email content, processing messages\n- JSON extraction: Bulk operations, data analysis\n\n## Troubleshooting\n\n### \"Browser is already in use\" error\nClose the existing playwright session:\n```bash\nplaywright-cli close --session=outlook-web\n```\nThen retry the command.\n\n### Login page appears unexpectedly\nSession has expired. Re-authenticate:\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web --headed\n# User completes login in the opened browser window\n```\n\n### Content not loading\nWait and retry:\n```bash\nplaywright-cli wait 3000 --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\n## UI Pattern Reference\n\nSee `references\u002Fui-patterns.md` for discovered element selectors and patterns specific to Outlook Web.\n","# Outlook Web Access Skill\n\nThis skill provides access to Outlook Web (outlook.office.com) via playwright-cli with persistent session management.\n\n## Session Configuration\n\n**All commands must use**: `--session=outlook-web`\n\nThis ensures cookies and authentication persist between commands.\n\n## First-Time Authentication\n\nMicrosoft login requires manual intervention. Follow these steps for first-time setup:\n\n### Step 1: Open Outlook in headed mode to trigger login\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web --headed\n```\n\nThe browser will open visibly and redirect to Microsoft login. **Tell the user to complete login manually** in the opened browser window.\n\n### Step 2: Verify authentication\nAfter user confirms login is complete:\n```bash\nplaywright-cli snapshot --session=outlook-web\n```\n\nIf successful, the snapshot will show inbox content (email subjects, folders). If it shows a login form, authentication is not complete.\n\n**Note**: After initial authentication, subsequent commands can run headless (default) since the session cookies persist.\n\n## Detecting Session Expiry\n\nMicrosoft sessions expire after ~7-14 days. Signs of expiry:\n- Snapshot shows login form instead of inbox\n- Navigation redirects to login URL\n\n**To re-authenticate**: Open Outlook in headed mode again:\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web --headed\n```\nComplete the login manually in the browser window.\n\n## Key URLs\n\n```\nBase: https:\u002F\u002Foutlook.office.com\n\nEmail:\n- \u002Fmail\u002Finbox           - Inbox\n- \u002Fmail\u002Fdrafts          - Drafts folder\n- \u002Fmail\u002Fsentitems       - Sent folder\n- \u002Fmail\u002Fdeleteditems    - Deleted\u002FTrash\n- \u002Fmail\u002Farchive         - Archive\n- \u002Fmail\u002Fjunkemail       - Junk\u002FSpam\n- \u002Fmail\u002Fsearch?q=TERM   - Search results\n- \u002Fmail\u002Fdeeplink\u002Fcompose - New email composer\n\nCalendar:\n- \u002Fcalendar             - Calendar view\n- \u002Fcalendar\u002Fview\u002Fday    - Day view\n- \u002Fcalendar\u002Fview\u002Fweek   - Week view\n- \u002Fcalendar\u002Fview\u002Fmonth  - Month view\n```\n\n## Email Operations\n\n### View Inbox\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\n### Read an Email\nNavigate to inbox, then click on an email row to select it:\n```bash\nplaywright-cli click \"EMAIL_SUBJECT_OR_SELECTOR\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\nThe reading pane will show the email content.\n\n### Compose New Email (Draft by Default)\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Fdeeplink\u002Fcompose\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\nFill in fields:\n```bash\n# Add recipient\nplaywright-cli fill \"[aria-label='To']\" \"recipient@example.com\" --session=outlook-web\n\n# Add subject\nplaywright-cli fill \"[aria-label='Add a subject']\" \"Subject line\" --session=outlook-web\n\n# Add body (the editor area)\nplaywright-cli fill \"[aria-label='Message body']\" \"Email content here\" --session=outlook-web\n```\n\n**IMPORTANT**: By default, save as draft instead of sending:\n```bash\n# Save as draft (Ctrl+S or close the compose window)\nplaywright-cli keyboard \"Control+s\" --session=outlook-web\n```\n\nOnly send if user explicitly requests:\n```bash\n# Send email (only when explicitly requested by user)\nplaywright-cli click \"[aria-label='Send']\" --session=outlook-web\n```\n\n### Reply to an Email\n\n**Method 1: Via Reading Pane (Simple)**\n\nWith an email open in the reading pane:\n```bash\n# Click Reply button\nplaywright-cli click \"[aria-label='Reply']\" --session=outlook-web\n\n# Fill reply message\nplaywright-cli fill \"[aria-label='Message body']\" \"Your reply text here\" --session=outlook-web\n\n# Save as draft (auto-saves, or use Ctrl+S)\nplaywright-cli press \"Control+s\" --session=outlook-web\n```\n\n**Method 2: Complete Reply Flow**\n\nFrom inbox to draft reply:\n```bash\n# 1. Navigate to inbox\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web\n\n# 2. Click the email (get ref from snapshot)\nplaywright-cli snapshot --session=outlook-web\nplaywright-cli click \u003Cemail-ref> --session=outlook-web\n\n# 3. Click Reply button\nplaywright-cli snapshot --session=outlook-web\nplaywright-cli click \u003Creply-button-ref> --session=outlook-web\n\n# 4. Fill reply\nplaywright-cli fill \u003Cmessage-body-ref> \"Your reply message\" --session=outlook-web\n\n# 5. Save draft (Ctrl+S or Escape)\nplaywright-cli press \"Control+s\" --session=outlook-web\n```\n\n**Method 3: Fast Batch Reply**\n\nUsing run-code for speed:\n```bash\nplaywright-cli run-code \"\n  await page.goto('https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox');\n  await page.getByRole('option').first().click();\n  await page.getByRole('button', { name: 'Reply', exact: true }).click();\n  await page.getByRole('textbox', { name: 'Message body' }).fill('Your reply');\n  await page.keyboard.press('Control+s');\n\" --session=outlook-web\n```\n\n**Note:** Replies are auto-saved as drafts and have \"Re: [Original Subject]\" format.\n\n### Forward an Email\n```bash\nplaywright-cli click \"[aria-label='Forward']\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n# Add recipient and content\n```\n\n### Delete an Email\nWith an email selected:\n```bash\nplaywright-cli click \"[aria-label='Delete']\" --session=outlook-web\n```\n\n### Search Emails\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Fsearch?q=YOUR_SEARCH_TERM\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\nOr use the search box:\n```bash\nplaywright-cli click \"[aria-label='Search']\" --session=outlook-web\nplaywright-cli fill \"[aria-label='Search']\" \"search query\" --session=outlook-web\nplaywright-cli keyboard \"Enter\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\n### Navigate Folders\n```bash\n# Drafts\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Fdrafts\" --session=outlook-web\n\n# Sent\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Fsentitems\" --session=outlook-web\n\n# Deleted\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Fdeleteditems\" --session=outlook-web\n```\n\n## Calendar Operations\n\n### View Calendar\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fcalendar\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\n### View Specific Time Range\n```bash\n# Day view\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fcalendar\u002Fview\u002Fday\" --session=outlook-web\n\n# Week view\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fcalendar\u002Fview\u002Fweek\" --session=outlook-web\n\n# Month view\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fcalendar\u002Fview\u002Fmonth\" --session=outlook-web\n```\n\n### View Event Details\nClick on an event in the calendar view:\n```bash\nplaywright-cli click \"EVENT_TITLE_OR_SELECTOR\" --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\n## Best Practices\n\n1. **Always snapshot after navigation** - Outlook loads asynchronously; snapshot confirms content is ready\n2. **Wait if needed** - If snapshot shows loading state, wait and snapshot again:\n   ```bash\n   playwright-cli wait 2000 --session=outlook-web\n   playwright-cli snapshot --session=outlook-web\n   ```\n3. **Use ARIA labels** - Outlook has good ARIA labeling; prefer `[aria-label='...']` selectors\n4. **Check for errors** - If an operation fails, snapshot to see current state\n5. **Default to drafts** - Never send emails without explicit user confirmation\n\n## Advanced Usage & Optimizations\n\n### Batch Operations with run-code\n\nFor faster programmatic operations, batch multiple commands using `run-code`:\n\n```bash\nplaywright-cli run-code \"\n  \u002F\u002F Open inbox and reply to first email\n  await page.goto('https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox');\n  await page.getByRole('option').first().click();\n  await page.getByRole('button', { name: 'Reply', exact: true }).click();\n  await page.getByRole('textbox', { name: 'Message body' }).fill('Your reply text');\n  await page.keyboard.press('Control+s');\n\" --session=outlook-web\n```\n\n**Benefits:** 60-70% faster than individual commands, single process invocation.\n\n### Direct Email Navigation\n\nIf you have an email ID (from URL or previous snapshot), navigate directly:\n\n```bash\n# Instead of: inbox → find → click\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\u002Fid\u002FAAQkAGMxODI1MWVlLTgy...\" --session=outlook-web\n```\n\nEmail IDs are found in URLs when emails are open: `\u002Fmail\u002Finbox\u002Fid\u002F\u003CEMAIL_ID>`\n\n### Skip Unnecessary Snapshots\n\nFor programmatic use, only snapshot when you need to extract data:\n\n```bash\n# Fast: No intermediate snapshots\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web\nplaywright-cli click e600 --session=outlook-web\nplaywright-cli click \"Reply\" --session=outlook-web\nplaywright-cli fill \"Message body\" \"Text\" --session=outlook-web\n# Only snapshot if you need to verify or extract data\n```\n\n### Resource Blocking for Speed (Advanced)\n\nBlock images, fonts, and analytics to speed up page loads by 30-50%:\n\n```bash\nplaywright-cli run-code \"\n  \u002F\u002F Block non-essential resources\n  await page.route('**\u002F*', (route) => {\n    const url = route.request().url();\n    if (url.includes('browser.events.data.microsoft.com') ||\n        url.includes('csp.microsoft.com') ||\n        url.match(\u002F\\\\.(png|jpg|jpeg|gif|svg|woff|woff2|ttf)$\u002F)) {\n      route.abort();\n    } else {\n      route.continue();\n    }\n  });\n\n  \u002F\u002F Then navigate\n  await page.goto('https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox');\n\" --session=outlook-web\n```\n\n**Note:** Test thoroughly as blocking resources may affect functionality.\n\n### Trust Auto-Save\n\nOutlook Web auto-saves drafts every few seconds. For programmatic workflows:\n- Skip navigating to drafts folder for verification\n- Trust that draft saved if no error occurred\n- Only verify when explicitly needed\n\n### Efficient Content Extraction for LLMs\n\n**Problem:** Full page snapshots include 60-95% UI chrome (toolbars, navigation, wrappers) and only 5-40% actual content.\n\n**Solution:** Use `run-code` to extract just the text you need:\n\n```bash\n# Extract email list as text (no YAML overhead)\nplaywright-cli run-code \"\n  const listbox = await page.locator('[role=\\\"listbox\\\"]');\n  return await listbox.innerText();\n\" --session=outlook-web\n```\n\n```bash\n# Extract just message body text\nplaywright-cli run-code \"\n  const body = await page.locator('[role=\\\"document\\\"]').first();\n  return await body.innerText();\n\" --session=outlook-web\n```\n\n```bash\n# Extract structured data as JSON\nplaywright-cli run-code \"\n  const emails = await page.locator('[role=\\\"option\\\"]')\n    .evaluateAll(opts => opts.slice(0, 10).map(o => ({\n      text: o.textContent.trim(),\n      unread: o.textContent.includes('Unread')\n    })));\n  return JSON.stringify(emails, null, 2);\n\" --session=outlook-web\n```\n\n**Benefits:**\n- 70-90% reduction in tokens\n- Faster LLM processing\n- Cleaner output (text or JSON vs YAML)\n\n**When to use:**\n- Full snapshots: Interactive exploration, getting element refs\n- Text extraction: Reading email content, processing messages\n- JSON extraction: Bulk operations, data analysis\n\n## Troubleshooting\n\n### \"Browser is already in use\" error\nClose the existing playwright session:\n```bash\nplaywright-cli close --session=outlook-web\n```\nThen retry the command.\n\n### Login page appears unexpectedly\nSession has expired. Re-authenticate:\n```bash\nplaywright-cli open \"https:\u002F\u002Foutlook.office.com\u002Fmail\u002Finbox\" --session=outlook-web --headed\n# User completes login in the opened browser window\n```\n\n### Content not loading\nWait and retry:\n```bash\nplaywright-cli wait 3000 --session=outlook-web\nplaywright-cli snapshot --session=outlook-web\n```\n\n## UI Pattern Reference\n\nSee `references\u002Fui-patterns.md` for discovered element selectors and patterns specific to Outlook Web.\n",{"name":5,"description":7,"allowed-tools":48},"Bash(playwright-cli:*)","main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Forganisciak\u002Foutlook-web",0,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del","2026-08-23 22:39:37",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add kbarbel640-del\u002Fskills --skill outlook-web",{"tool":62,"command":63},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill outlook-web",{"tool":65,"command":66},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill outlook-web","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Forganisciak\u002Foutlook-web\u002FSKILL.md",true,[70,76],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"_meta.json","REFERENCE","参考文档",279,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Forganisciak\u002Foutlook-web\u002F_meta.json",{"path":77,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fui-patterns.md",4405,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Forganisciak\u002Foutlook-web\u002Freferences\u002Fui-patterns.md",[81,112,138,159,165,185],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":92,"publishedAt":43},"01M6G8J55967D6281ACMKAKTEQ","crowd-prompting","A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzzadrian\u002Fcrowd-prompting\u002FSKILL.md",[87],{"categoryNo":88,"categoryName":89,"taxonomyType":90,"taxonomyTypeDesc":91},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111],"crowd prompting","prompting","api","with","tokens","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":121,"publishedAt":43},"01M6G8J0PKPAYVET6BWE8W4C26","dilemm-ai","Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzyori\u002Fdilemm-ai\u002FSKILL.md",[118],{"categoryNo":119,"categoryName":120,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[122,95,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,100,36],"dilemm ai","arena","analyze","browser","openclaw agent","create","automation","browser automation","bot","openclaw","design","strategy","headless","compete","submit","matchmaking",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":147,"publishedAt":43},"01M6G8HWAF3K9SW7NP3Z83CPJ6","arxiv-paper-reviews","Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date\u002Fcategory\u002Finterest, viewing paper details with comments, or submitting paper reviews via API at http:\u002F\u002F150.158.152.82:8000.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Fweak-accept\u002FSKILL.md",[144],{"categoryNo":145,"categoryName":146,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",[148,149,150,151,152,153,154,96,155,136,36,156,95,157,158],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":160,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":43},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[163],{"categoryNo":145,"categoryName":146,"taxonomyType":20,"taxonomyTypeDesc":21},[151,150,149,148,158,153,154,96,152,136,36,155,156,95,157],{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":43},"01M6G8HM95Y64JNVFC2HN4E2BG","git-summary","Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzweack\u002Fgit-summary\u002FSKILL.md",[],[172,173,174,175,176,177,178,179,180,181,182,183,184],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":195,"publishedAt":43},"01M6G8HGEGF05CNEJCGVYFSC4R","agent-constitution","Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fztsalexey\u002Fagent-constitution\u002FSKILL.md",[191,192],{"categoryNo":119,"categoryName":120,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":193,"categoryName":194,"taxonomyType":90,"taxonomyTypeDesc":91},"01JBSEEDCAT000000000000037","律师与法务",[196,197,198,199,96,200,201,49,202,156,203,204,205,206,207,109,208,209,210],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]