email-integration
Integrates with any IMAP/SMTP mail server (Gmail, Outlook, Naver, Kakao, custom servers, etc.). Use when the user wants to read, send, search, reply to, or manage emails. Primary path: validate_config
SKILL.mdsrc-tauri/bundled_skills/email-integration/SKILL.md
GitHubEmail Integration
Interact with mail on behalf of the user. Prefer IMAP/SMTP scripts when they work; use sticky agent browser webmail only as fallback.
Path conventions
Paths are relative to this skill's Base Directory. Replace <skill-base-dir> with its absolute path in commands.
- On Linux/macOS, use
python3ifpythonis unavailable. - Always quote paths:
"<skill-base-dir>/scripts/...".
Security (mandatory)
- NEVER ask for passwords in chat or display
~/.libragent/email_config - Collect password only via a single hidden shell prompt; persist with
setup_account.py - If the user pastes a secret in chat, do not echo it—run setup immediately
- Browser fallback uses LibrAgent’s sticky agent browser profile (not everyday Chrome). Ask the user to sign in inside that browser when needed.
Decision tree
- Try IMAP script path (steps 1–4 below).
- On failure that blocks scripts, offer browser fallback (do not loop forever on setup):
python/python3missing- config missing/corrupt and user declines password setup, or setup/auth fails
- IMAP/SMTP auth failure, app-password / Modern Auth blocked
- If user agrees → follow references/browser-fallback.md.
- If not logged in inside the agent browser → ask the user to sign in once in a browser session, then retry.
- If user declines all paths → explain IMAP setup vs agent browser sign-in and stop.
Workflow (IMAP primary)
1. Detect config
python "<skill-base-dir>/scripts/validate_config.py"
- Exit
0→ configured, go to step 3 - Exit
1→ not configured, go to step 2 (or offer browser fallback if user prefers) - Exit
2→ corrupt config, go to step 2 with--reset
2. Setup (first time or reset)
See references/setup-flow.md for the PowerShell two-step pattern and preset/custom domain commands.
3. Dispatch action
Classify the request and call email_client.py:
| Action | When | Command |
|---|---|---|
read_inbox |
Browse inbox | --action read_inbox [--limit N] [--filter unread|today|all] |
read_email |
Full content by UID | --action read_email --uid <UID> |
send_email |
Compose/send/reply | --action send_email --to ... --subject ... --body ... [--reply-to-uid <UID>] |
search_email |
Keyword/sender/date | --action search_email --query "<IMAP search>" |
manage_email |
Mark/move/delete | --action manage_email --uid <UID> --op <mark_read|mark_unread|move|delete> |
Search query examples: see references/request-patterns.md. Server presets: see references/server-profiles.md.
Draft vague compose requests yourself; confirm with the user before sending. For bulk delete/move, confirm count first.
4. Present results
See references/output-format.md. Errors: references/error-handling.md.