English — Official English version of privat-mail-writer.
Privat-Mail-Writer (English)
Overview & Purpose
Privat-Mail-Writer creates short, friendly, and contact-appropriate email drafts. The skill is designed to be user-neutral: it contains no real contacts, no real signatures, and no real email contents.
The core is lazy and empirical: create or update the profile for a contact only when the user wants to write a specific email to that contact. Do not generate profiles in advance. If no email history is available, do not invent style claims; instead, write neutrally and briefly, or specifically ask for examples.
Resources
CONFIG.md - central preferences, if-then rules, permission gates, and blacklist toggles.
BLACKLIST.md - exclusions for newsletters, system senders, and contacts without profiles.
USECASES.md - usecase registry and rules for new usecases.
SIGNATURES.md - neutral signature and greeting rules.
MUSTER-BLOCKS.md - short reusable text blocks.
kontaktprofile.json - empty, user-neutral schema for contact profiles. Maintain real profiles only locally and with data minimization.
Workflow
- Load config: Read
CONFIG.md. If the blacklist is active, additionally check BLACKLIST.md.
- Check triggers: Only profile during a concrete writing task for a specific contact, e.g., "write an email to brother Simon". No inbox sweeps just to create profiles.
- Check blacklist: Newsletters, no-reply, system senders, and excluded domains/contacts do not get a contact profile. For such cases, reply neutrally or do not reply.
- Identify email task: Determine goal, recipient, occasion, desired brevity, language, tone, and necessary facts.
- Determine usecase: Read
USECASES.md and select the most appropriate usecase. If no usecase fits, create a new reusable usecase or briefly ask in case of missing required information.
- Check contact profile: For every non-excluded recipient, search for an existing profile in
kontaktprofile.json or in a private local profile copy.
- Create or update profile: If no robust profile exists, read up to the last ten relevant emails with that specific contact from the available email backend. Sent emails carry more weight for writing style than received emails.
- Save empirical data: Store only summarizing, verifiable style, relationship, and category signals in the contact profile. Do not store raw emails, long quotes, or unnecessary personal details.
- Apply permission gate: Respect the gates in
CONFIG.md before sending, handling sensitive content, or in case of missing required information.
- Write draft: Combine usecase form, contact profile, and current task. Imitate the style without inventing false intimacy, false commitments, or unverified reasons.
- Deliver output: Output subject and email text by default. Only send if the user has explicitly authorized sending and a matching email tool is available.
Contact Profiles
A contact profile does not describe the person per se, but rather the observed communication relationship and the account holder's writing style towards this person.
Profile fields should remain concise:
- last contact time
- number and timeframe of evaluated emails
- greeting and closing phrase
- informal/formal address (Du/Sie/formality)
- sentence length and typical brevity
- level of warmth, directness, commitment
- relationship assessment with confidence score
- contact category, e.g.,
family, inner-circle, friends, colleagues, services, official, unknown
- category source: user statement, email text, address book, signature, or inference
- category evidence level:
user-confirmed, strong, medium, weak
- short paraphrased evidence such as "several sent emails end with 'Viele Grüße'" or "replies remain under five sentences"
Check monthly if an age check is due. If the month of the current date differs from the stored last_age_check, delete profiles whose last_contact_at is more than one year ago, and set last_age_check to the current date. The initial value in the neutral JSON is 2026-06-18.
Style Rules
- Keep it brief. Private emails rarely need long introductions.
- Stay friendly, but do not overexplain.
- State real reasons only if specified by the user or certain from context.
- For official rejections/cancellations: polite, clear, without a long novel of justification.
- In case of uncertainty about facts: ask a brief follow-up question before finalizing the draft.
- Write German texts with genuine umlauts: ä, ö, ü, Ä, Ö, Ü, ß.
New Usecases
If an email task seems reusable and is not yet covered in USECASES.md, add the usecase:
- stable ID, e.g.,
UC-002
- name and typical triggers
- goal of the email
- required and optional details
- default length and tone
- short template or block sequence
- open follow-up questions if required details are missing
A one-off special case should not be bloated into a usecase. In that case, simply deliver the current draft.
Output Format
For regular drafts:
Betreff: ...
Sehr geehrte ...
...
Mit freundlichen Grüßen
[Signatur]
If the user only wants text without a subject line, deliver only the email text. If multiple variants make sense, offer at most two variants: "very short" and "slightly warmer".
Limitations
Do not invent contact profiles. Do not copy confidential details from emails into the reply unnecessarily. Do not send any email without explicit authorization. Do not formulate legal, medical, or financial commitments unless explicitly specified by the user.
Changelog
0.2.0 (2026-06-19)
- Added
CONFIG.md and BLACKLIST.md.
- Restricted profile creation to concrete email writing tasks.
- Included contact categories with source and evidence level in the profile schema.
0.1.0 (2026-06-19)
- Initial version with usecase registry, signature rules, sample blocks, and empty contact profile JSON.
1---2name: privat-mail-writer-23description: This skill should be used when the user wants to write, reply to, decline, follow up on, shorten, rephrase, or draft private or semi-formal emails in their own style, especially for appointments, official cancellations, friendly short replies, and contact-dependent tone. Start profile analysis only upon a specific email writing request.4---56<img src="banner.png" width="100%" alt="privat-mail-writer banner">78> **English** — Official English version of `privat-mail-writer`.91011# Privat-Mail-Writer (English)1213## Overview & Purpose1415Privat-Mail-Writer creates short, friendly, and contact-appropriate email drafts. The skill is designed to be user-neutral: it contains no real contacts, no real signatures, and no real email contents.1617The core is lazy and empirical: create or update the profile for a contact only when the user wants to write a specific email to that contact. Do not generate profiles in advance. If no email history is available, do not invent style claims; instead, write neutrally and briefly, or specifically ask for examples.1819## Resources2021- `CONFIG.md` - central preferences, if-then rules, permission gates, and blacklist toggles.22- `BLACKLIST.md` - exclusions for newsletters, system senders, and contacts without profiles.23- `USECASES.md` - usecase registry and rules for new usecases.24- `SIGNATURES.md` - neutral signature and greeting rules.25- `MUSTER-BLOCKS.md` - short reusable text blocks.26- `kontaktprofile.json` - empty, user-neutral schema for contact profiles. Maintain real profiles only locally and with data minimization.2728## Workflow29301. **Load config:** Read `CONFIG.md`. If the blacklist is active, additionally check `BLACKLIST.md`.312. **Check triggers:** Only profile during a concrete writing task for a specific contact, e.g., "write an email to brother Simon". No inbox sweeps just to create profiles.323. **Check blacklist:** Newsletters, no-reply, system senders, and excluded domains/contacts do not get a contact profile. For such cases, reply neutrally or do not reply.334. **Identify email task:** Determine goal, recipient, occasion, desired brevity, language, tone, and necessary facts.345. **Determine usecase:** Read `USECASES.md` and select the most appropriate usecase. If no usecase fits, create a new reusable usecase or briefly ask in case of missing required information.356. **Check contact profile:** For every non-excluded recipient, search for an existing profile in `kontaktprofile.json` or in a private local profile copy.367. **Create or update profile:** If no robust profile exists, read up to the last ten relevant emails with that specific contact from the available email backend. Sent emails carry more weight for writing style than received emails.378. **Save empirical data:** Store only summarizing, verifiable style, relationship, and category signals in the contact profile. Do not store raw emails, long quotes, or unnecessary personal details.389. **Apply permission gate:** Respect the gates in `CONFIG.md` before sending, handling sensitive content, or in case of missing required information.3910. **Write draft:** Combine usecase form, contact profile, and current task. Imitate the style without inventing false intimacy, false commitments, or unverified reasons.4011. **Deliver output:** Output subject and email text by default. Only send if the user has explicitly authorized sending and a matching email tool is available.4142## Contact Profiles4344A contact profile does not describe the person per se, but rather the observed communication relationship and the account holder's writing style towards this person.4546Profile fields should remain concise:4748- last contact time49- number and timeframe of evaluated emails50- greeting and closing phrase51- informal/formal address (Du/Sie/formality)52- sentence length and typical brevity53- level of warmth, directness, commitment54- relationship assessment with confidence score55- contact category, e.g., `family`, `inner-circle`, `friends`, `colleagues`, `services`, `official`, `unknown`56- category source: user statement, email text, address book, signature, or inference57- category evidence level: `user-confirmed`, `strong`, `medium`, `weak`58- short paraphrased evidence such as "several sent emails end with 'Viele Grüße'" or "replies remain under five sentences"5960Check monthly if an age check is due. If the month of the current date differs from the stored `last_age_check`, delete profiles whose `last_contact_at` is more than one year ago, and set `last_age_check` to the current date. The initial value in the neutral JSON is `2026-06-18`.6162## Style Rules6364- Keep it brief. Private emails rarely need long introductions.65- Stay friendly, but do not overexplain.66- State real reasons only if specified by the user or certain from context.67- For official rejections/cancellations: polite, clear, without a long novel of justification.68- In case of uncertainty about facts: ask a brief follow-up question before finalizing the draft.69- Write German texts with genuine umlauts: ä, ö, ü, Ä, Ö, Ü, ß.7071## New Usecases7273If an email task seems reusable and is not yet covered in `USECASES.md`, add the usecase:7475- stable ID, e.g., `UC-002`76- name and typical triggers77- goal of the email78- required and optional details79- default length and tone80- short template or block sequence81- open follow-up questions if required details are missing8283A one-off special case should not be bloated into a usecase. In that case, simply deliver the current draft.8485## Output Format8687For regular drafts:8889```text90Betreff: ...9192Sehr geehrte ...9394...9596Mit freundlichen Grüßen97[Signatur]98```99100If the user only wants text without a subject line, deliver only the email text. If multiple variants make sense, offer at most two variants: "very short" and "slightly warmer".101102## Limitations103104Do not invent contact profiles. Do not copy confidential details from emails into the reply unnecessarily. Do not send any email without explicit authorization. Do not formulate legal, medical, or financial commitments unless explicitly specified by the user.105106## Changelog107108### 0.2.0 (2026-06-19)109- Added `CONFIG.md` and `BLACKLIST.md`.110- Restricted profile creation to concrete email writing tasks.111- Included contact categories with source and evidence level in the profile schema.112113### 0.1.0 (2026-06-19)114- Initial version with usecase registry, signature rules, sample blocks, and empty contact profile JSON.