skills/email-voice-draft/SKILL.md
Draft an email reply in the user's voice using their business context and Notion knowledge
npx skillsauth add sofer/.agents email-voice-draftInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Draft a reply to an email thread that sounds like the user. The skill loads the user's voice profile and business context from configuration files, optionally enriches the reply with knowledge from Notion, and produces a draft that a downstream skill (e.g. gmail-draft) can save to Gmail. The human always reviews before sending.
Before drafting, read the required configuration:
~/.agents/config/voice-profile.yaml for voice and tone rules. Apply the tone, language, rules, and avoid fields to all written output. If this file is missing, stop and report: "Voice profile not found at ~/.agents/config/voice-profile.yaml".yaml files in ~/.agents/config/business-context/ for domain knowledge (company identity, offerings, contacts, terminology). At minimum, company.yaml and offerings.yaml must exist. If the directory or these required files are missing, stop and report: "Business context not found at ~/.agents/config/business-context/. At minimum, company.yaml and offerings.yaml are required."contacts.yaml, terminology.yaml) are missing, proceed with what is available.Check that the input includes an email thread with the following required fields:
If any of these are missing, stop and report which field(s) are absent. Do not draft a reply.
Also note any optional fields that are present:
in_reply_to)Identify the key topics in the email that might have documentation in the user's Notion workspace. Consider: product or service names, processes, dates, pricing, people, or any domain-specific subject matter.
For each distinct topic worth searching:
mcp__claude_ai_Notion__notion-search with a concise search query derived from the topic. Set query_type to "internal".mcp__claude_ai_Notion__notion-fetch with that page's URL or ID to retrieve the full content.context_used output.Important:
Draft the reply applying all of the following:
Voice profile rules:
rules listavoid listContent rules:
reply_guidance is provided, follow it. User guidance takes precedence over what the email asks for when they conflict.Subject line:
Recipient:
to to the sender of the received email (the from field of the input).Return the result in the following structure:
draft_reply:
context_used (optional):
draft_reply:
to: {recipient email address}
subject: {reply subject line}
body: |
{the draft reply text in the user's voice}
thread_id: {Gmail thread ID, if provided}
in_reply_to: {Message-ID, if provided}
context_used:
- {Notion page title or URL}
- {Notion page title or URL}
The draft_reply fields are structured to pass directly to the gmail-draft skill. The context_used list is for transparency and human review.
tools
Check whether Claude and Codex have equivalent access to shared agent resources, skills, hooks, plugins, MCP servers, permissions, startup behaviour, and provider-specific adapter config. Use when comparing agent environments, debugging missing capabilities after restart, or deciding whether to symlink a resource or configure a runtime.
testing
Record substantive skill use in an append-only local log. Use after choosing or invoking a non-system skill for real work, when a skill is inspected but not used, or when a skill fails to apply. Do not use for routine system skills or incidental file reads.
testing
Turn a vague or underspecified request into a self-contained problem statement. Use when the user has a rough idea, when a request would fail if handed directly to an agent, or before non-trivial work that needs shared understanding.
data-ai
Append a one-line learning to ~/.agents/learning-log.md. Use when the user types /learning, or when something genuinely worth remembering surfaced during work and the user confirms it should be captured.