Automate Classic Outlook on Windows via COM. List, search, draft, and send emails with safety guardrails. Requires Classic Outlook (not New Outlook) running locally.
Automate Classic Outlook on Windows using the `outlookctl` CLI tool. This skill enables AI-assisted email management with built-in safety guardrails.
1. **Draft-First Workflow**: All emails are created as drafts first, never auto-sent
2. **Explicit Confirmation**: Sending requires user approval with `--confirm-send YES`
3. **Preview Before Send**: Always show email preview to user before sending
4. **Audit Logging**: All send operations are logged for accountability
```bash
outlookctl doctor
```
Verifies Classic Outlook is running and COM automation is available.
```bash
outlookctl list --count 10
outlookctl list --folder "Sent Items" --count 5
outlookctl list --count 3 --include-body
```
**Note**: Always retrieve metadata only unless user explicitly requests body content.
```bash
outlookctl search --from "[email protected]"
outlookctl search --unread-only --count 10
outlookctl search --subject "meeting"
outlookctl search --from "[email protected]" --unread-only --include-body-snippet
```
```bash
outlookctl get --entry-id "ENTRY_ID_HERE"
outlookctl get --folder "Inbox" --index 0
```
```bash
outlookctl draft --to "[email protected]" --subject "Subject" --body-text "Body content"
outlookctl draft --to "[email protected]" --subject "Subject" --body-html "<p>HTML content</p>"
outlookctl draft --to "[email protected]" --to "[email protected]" --cc "[email protected]"
```
**Important**: Draft command creates a draft in Outlook. Always show the draft preview to the user before proceeding to send.
```bash
outlookctl send --entry-id "DRAFT_ENTRY_ID" --confirm-send YES
```
**Critical**: The `--confirm-send YES` flag is required. Never send without explicit user approval.
```bash
outlookctl attachments list --entry-id "EMAIL_ENTRY_ID"
outlookctl attachments save --entry-id "EMAIL_ENTRY_ID" --output-dir "./downloads"
outlookctl attachments save --entry-id "EMAIL_ENTRY_ID" --output-dir "./downloads" --index 0
```
1. Use `outlookctl list` or `outlookctl search` with appropriate filters
2. Retrieve metadata only by default (no `--include-body`)
3. If user wants to read specific email content, use `outlookctl get` with the entry ID
4. Present results in a clear, organized format
1. **NEVER auto-send emails**
2. Create draft using `outlookctl draft` command
3. Show the draft details to user (to, subject, body preview)
4. Ask user explicitly: "Would you like me to send this email?"
5. Only if user confirms, use `outlookctl send --entry-id DRAFT_ID --confirm-send YES`
6. Inform user that email has been sent and audit log has been created
1. Search/list relevant emails with `--include-body-snippet` (not full body)
2. Analyze the snippets and metadata
3. Provide concise summary
4. If deeper analysis needed, ask user if they want you to fetch full body content
All commands output JSON. Check for `error` field in response:
```json
{
"error": "Error description",
"error_code": "ERROR_CODE",
"remediation": "Suggested fix"
}
```
Common error codes:
If you encounter `OUTLOOK_UNAVAILABLE`, suggest user runs `outlookctl doctor` to diagnose.
```bash
outlookctl search --unread-only --count 10 --include-body-snippet
```
Then summarize the results for the user.
1. Find email to reply to:
```bash
outlookctl search --from "[email protected]" --count 1
```
2. Create draft reply:
```bash
outlookctl draft --to "[email protected]" --subject "Re: Original Subject" --body-text "Reply content"
```
3. Show draft to user and ask for confirmation
4. If user confirms:
```bash
outlookctl send --entry-id "DRAFT_ENTRY_ID" --confirm-send YES
```
1. Search for email with attachments:
```bash
outlookctl search --subject "Invoice" --count 5
```
2. List attachments:
```bash
outlookctl attachments list --entry-id "EMAIL_ENTRY_ID"
```
3. Save attachments:
```bash
outlookctl attachments save --entry-id "EMAIL_ENTRY_ID" --output-dir "./invoices"
```
1. **Local Only**: This tool only works with locally installed Classic Outlook on Windows
2. **No Auto-Send**: NEVER send emails without explicit user confirmation
3. **Draft First**: Always create drafts before sending
4. **Metadata Default**: Don't fetch email bodies unless necessary
5. **Exact Confirmation**: Send confirmation must be exactly `--confirm-send YES`
If `outlookctl` is not in PATH, use:
```bash
uv run --project "C:/path/to/outlookctl" python -m outlookctl.cli <command>
```
Or from the project directory:
```bash
uv run python -m outlookctl.cli <command>
```
Leave a review
No reviews yet. Be the first to review this skill!
# Download SKILL.md from killerskills.ai/api/skills/outlook-automation/raw