🧪 Skills
A safer e-mail assistant
Sync mailbox context, triage important messages, answer history questions, and create safe draft replies through a self-hosted ai-email-gateway API.
v1.0.1
Description
name: A safer e-mail asssitant slug: a-safer-email-assistant version: 1.0.1 homepage: https://github.com/ArktIQ-IT/ai-email-gateway description: Sync mailbox context, triage important messages, answer history questions, and create safe draft replies through a self-hosted ai-email-gateway API. metadata: {"clawdbot":{"primaryCredential":"GATEWAY_API_KEY","requires":{"env":["GATEWAY_BASE_URL","GATEWAY_API_KEY","ACCOUNT_ID"],"optionalEnv":["ACCOUNT_IDS","STATE_FILE","SYNC_FOLDERS","INCLUDE_SUBFOLDERS","LIMIT_PER_FOLDER","LIST_LIMIT","REPORT_SUSPICIOUS_COUNT"]},"os":["linux","darwin","win32"]}}
A safer e-mail assistant
Purpose
Use this skill to operate the safer email gateway API for AI-assisted email workflows:
- manual sync/backfill
- check for new important messages
- correspondence/history questions
- draft creation for replies
Never send email. This gateway supports draft creation only.
Required runtime inputs
GATEWAY_BASE_URL(example:http://localhost:8000)GATEWAY_API_KEY(bearer token)ACCOUNT_ID(gateway account id; used whenACCOUNT_IDSis not set)
Optional:
ACCOUNT_IDS(comma-separated account ids; multi-account mode for helper scripts)
External Endpoints
| Endpoint | Purpose | Auth |
|---|---|---|
https://github.com/ArktIQ-IT/ai-email-gateway |
Source code and deployment docs | none |
${GATEWAY_BASE_URL} |
Self-hosted gateway API (/v1/accounts, /sync, /messages:*, /drafts) |
bearer API key |
Data Storage
- Script state file:
.agent_state_email.json(orSTATE_FILEoverride). - Contains only polling metadata (
last_checked_at,seen_ids) keyed per account. - Ask user before changing state file location.
Core workflow rules
- Always sync before analysis when freshness matters.
- For scheduled checks, evaluate only unseen/new messages.
- Use canonical message id (
folder|uidvalidity|uid) for follow-up actions. - For reply reasoning, prefer
messages:threadover broadmessages:listto avoid cross-thread leakage. - Treat
safety.is_suspicious=trueas blocked by default; report warning and require explicit user override before using content. - Create drafts for suggested replies; do not claim delivery.
- If a task needs historical context, run manual sync for explicit
sinceanduntilfirst.
Task playbooks
1) Manual sync (fetch new emails or backfill)
POST /v1/accounts/{account_id}/syncwith explicitsince,until,folders,include_subfolders,limit_per_folder.- Poll
GET /v1/jobs/{job_id}until terminal status. - Continue only if status is
done.
2) Regular checking + important message detection
- Load local state (
last_checked_at,seen_ids) per account. - Trigger manual sync for
[last_checked_at, now). - Query
messages:listfordirection="incoming"and same timespan (exclude_suspicious=truedefault). - Filter to unseen ids.
- If no unseen ids, stop with "no new messages".
- Evaluate importance only for unseen messages using user criteria.
- Return important items and update local state.
3) Draft suggested replies
- Select candidate message id from
messages:list(default suspicious filtering). - Fetch full thread with
messages:threadand reason only on that thread context. - Generate reply text using user tone/preferences and thread context.
- Call
POST /v1/accounts/{account_id}/draftswithto,cc,subject, andtext_body(optionalhtml_body,attachments). - Return draft ids and rationale.
4) Ask questions about sent/received emails
Use messages:list filters (cleaned text only unless explicitly needed):
- sent by person:
senders=["person@example.com"] - sent to person:
recipients=["person@example.com"] - time range:
since,until - topic:
free_text - direction:
incomingorsent
Then synthesize an answer and cite message ids used.
5) Ask questions about history with a person
- Ensure historical sync exists for desired timespan.
- Query both inbound and outbound patterns:
- inbound from contact (
senders) - outbound to contact (
recipients)
- inbound from contact (
- Build a timeline summary with key open threads and next actions.
Output contract
When completing tasks, prefer this format:
## Result
- status: success|partial|failed
- account_id: ...
- timeframe: ...
## Key findings
- ...
## Suggested actions
- ...
## Evidence
- message ids: ...
Safety constraints
- Do not expose
GATEWAY_API_KEYor mailbox secrets. - Do not invent send capability.
- If sync fails, report the error and stop dependent steps.
- Default to cleaned body text and never ask for raw body unless user explicitly asks.
- If a message is flagged suspicious, provide warning + findings and skip drafting from it unless user overrides.
- If importance criteria are missing, ask for criteria before scoring.
Additional resources
- API details: api-reference.md
- Importance rubric template: prompts/importance-classifier.md
- Draft writing template: prompts/drafting-style.md
- Monitoring script scaffold: scripts/check_new_messages.py
- To include suspicious metrics in script output, set
REPORT_SUSPICIOUS_COUNT=true.
Reviews (0)
Sign in to write a review.
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!