Reply email
Skill marian-kamenistak/claude-email-assistant/skills/reply-email
An autonomous email triage and reply system built with Claude Code and Google Workspace CLI (gws).
npx -y skills add marian-kamenistak/claude-email-assistant --skill reply-emailAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Draft an email reply in your voice. Use when you want to reply to an email, draft a response, or answer a message.
SKILL.md
3.7 KB, as published. Nobody here has run it
Email Reply Skill
Draft email replies that sound like the user, not like AI.
Modes
Single reply (default)
/reply-email [message-id] or /reply-email + paste email text
Quick-reply shortcuts
/reply-email confirm [message-id]— 1-line confirmation/reply-email schedule [message-id]— propose dates + calendar link/reply-email followup [message-id]— gentle follow-up
Batch mode
When user says "draft all" or during morning triage:
- List all emails needing reply
- Draft all replies without asking
- Save all as Gmail Drafts
- Show summary with time estimates
Step 1: Get the email
# Fetch the full message
gws gmail users messages get --params '{"userId":"me","id":"MESSAGE_ID","format":"full"}' --format json
Step 2: Load voice context
Read these files before drafting (every time):
skills/reply-email/email-voice-guide.md— real examples of how you writeskills/reply-email/learned-replies.md— corrections from past sessionsshared/communication-style.md— writing rules
Step 3: Draft the reply
Rules
- Open with the person's name (first name)
- Get to the point in 1-2 sentences
- Keep it short — if it can be 3 lines, make it 3 lines
- Include calendar link when suggesting meetings
- No pleasantries ("Hope this finds you well")
- No corporate phrases ("Feel free to", "Don't hesitate to")
- No AI words (leverage, navigate, unlock, empower, delve, foster, robust, holistic)
Final check
Read the draft out loud. Does it sound like a real person typing fast between calls? Or does it sound like AI being polite? If the latter, cut half the words.
Step 4: Save as Gmail Draft
Default: create a Gmail draft, NOT send.
# Build base64url-encoded RFC 2822 email
RAW=$(python3 -c "
import base64, email.message
msg = email.message.EmailMessage()
msg['To'] = 'RECIPIENT_EMAIL'
msg['Subject'] = 'Re: ORIGINAL_SUBJECT'
msg['In-Reply-To'] = 'ORIGINAL_MESSAGE_ID_HEADER'
msg['References'] = 'ORIGINAL_REFERENCES_HEADER'
msg.set_content('''REPLY_BODY_HERE''')
print(base64.urlsafe_b64encode(msg.as_bytes()).decode())
")
gws gmail users drafts create \
--params '{"userId":"me"}' \
--json "{\"message\":{\"threadId\":\"THREAD_ID\",\"raw\":\"$RAW\"}}"
Only send directly if user says "send it":
gws gmail +reply --message-id MESSAGE_ID --body "REPLY_TEXT"
Gmail label IDs
Configure these label IDs after creating them in Gmail (see INSTALL.md step 2b):
AI_READY_LABEL_ID=Label_XXX
INFO_LABEL_ID=Label_XXX
OPS_LABEL_ID=Label_XXX
HIGH_LABEL_ID=Label_XXX
BILLING_LABEL_ID=Label_XXX
To find your label IDs:
gws gmail users labels list --params '{"userId":"me"}' --format json
Step 5: Learn from the outcome
Immediate learning
When user gives feedback → incorporate, redraft, log correction.
Async learning (morning routine)
- Fetch sent messages from last 24h
- Cross-reference with
drafts-log.md - Diff draft vs what was sent
- Log corrections in
learned-replies.md
What to learn from
- Words removed → too verbose or corporate
- Words added → missing natural phrasing
- Structure changes → wrong format
- Tone shifts → misjudged the relationship
- Shortened replies → wrote too much (most common mistake)
Log format for drafts-log.md
### [YYYY-MM-DD HH:MM] [Thread ID] [Recipient]
**Subject:** Re: [subject]
**Draft ID:** [gmail draft id]
**Our draft:**
> [exact text]
**Status:** pending | sent-as-is | sent-with-edits | discarded