writer
Generate content in your authentic voice across emails, blogs, social media, and reports
What this skill does
# Writer Skill
Generate content in your authentic voice by analyzing writing samples and applying learned voice patterns through adaptive interviewing and voice-matched generation.
## Philosophy
**Key Innovation**: This isn't a generic AI writer - it's YOUR voice, learned from YOUR writing.
Unlike generic AI content generation, this skill:
- Learns from 6 distinct voice profiles (work email, personal email, blog, LinkedIn, Twitter, reports)
- Interviews you like a Pulitzer-winning journalist to deeply understand your message
- Validates output against your authentic patterns (not generic "good writing")
- Saves versioned drafts to Obsidian for iteration and history
**Simplicity**: Geoffrey's native LLM capabilities analyze your voice. Scripts just fetch samples. No complex NLP libraries - clean, maintainable architecture.
---
## When to Activate
Use this skill when you need to:
- Write emails that sound like you (not generic AI)
- Draft blog posts in your established voice
- Create social media content consistent with your style
- Generate reports matching your professional tone
- Ensure content authentically represents your perspective and voice
**DON'T use for**:
- Quick factual responses (use native Claude)
- Content in someone else's voice
- Generic templates
---
## Voice Profiles
Six distinct profiles capture different contexts:
| Profile | Source | Sample Target | Status |
|---------|--------|---------------|--------|
| `email_work` | PSD Gmail (sent emails, 6mo) | 50+ emails | Check writing-voice.json |
| `email_personal` | Personal/HRG Gmail (sent, 6mo) | 50+ emails | Check writing-voice.json |
| `blog_technical` | psd401.ai + blog.krishagel.com | 10+ posts | Check writing-voice.json |
| `social_linkedin` | LinkedIn profile posts | 30+ posts | Check writing-voice.json |
| `social_twitter` | X/Twitter posts | 30+ posts | Check writing-voice.json |
| `report_formal` | User-provided samples | 5-10 reports | Check writing-voice.json |
**Confidence Levels**:
- **High (0.85+)**: 50+ samples - voice well established
- **Moderate (0.70-0.84)**: 20-49 samples - patterns emerging
- **Low (<0.70)**: <20 samples - insufficient data, warn user
---
## 6-Phase Workflow
### Phase 1: Voice Profile Selection & Validation
**Goal**: Load the right voice profile and verify it's ready
**Process**:
1. Detect content type from user request:
- "write email" → `email_work` or `email_personal` (ask which)
- "blog post" → `blog_technical`
- "LinkedIn post" → `social_linkedin`
- "tweet" → `social_twitter`
- "report" → `report_formal`
2. Load voice profile:
```bash
cat ~/Library/Mobile\ Documents/com~apple~CloudDocs/Geoffrey/knowledge/writing-voice.json
```
3. Check confidence and sample count:
- If confidence ≥ 0.85: Proceed with confidence
- If confidence 0.70-0.84: Proceed with note
- If confidence < 0.70: Warn user, offer options
**Low Confidence Response**:
```
Only {sample_count} {content_type} samples (confidence: {confidence}).
Target: {target_samples}+ samples for 0.85+ confidence.
Options:
1. Gather more samples (recommended)
2. Use {alternative_profile} voice as proxy (confidence: {alt_confidence})
3. Proceed anyway (may not fully match your voice)
Preference?
```
**Checkpoint 1**: User confirms profile or gathers more samples
---
### Phase 2: Deep Interview (Adaptive)
**Goal**: Deeply understand what you want to communicate
**Process**:
1. Load interview questions from `templates/interview-questions.json`
2. Adapt depth to content type:
- **Tweet/Social**: 3-5 questions (~2-3 min)
- **Email Quick**: 4 questions (~3 min)
- **Email Complex**: 8 questions (~5 min)
- **Blog**: 8-12 questions (~5-8 min)
- **Report**: 15+ questions (~10-15 min)
3. Interview like a journalist:
- Ask follow-up questions for vague answers
- Probe for examples, data, evidence
- Clarify ambiguities
- Build structured understanding
**Email Interview Example** (complex):
```
1. Who are the recipient(s) and what's the context?
→ [User answers]
2. What's the primary goal?
→ [User answers]
[If vague: "Can you be more specific about the outcome you want?"]
3. What background do they need?
→ [User answers]
4. What are the key points? (Max 3-5)
→ [User answers]
[If >5: "Let's focus on the most critical 3-5 points."]
... continue through 8 questions
```
**Blog Interview Example**:
```
1. What's your central message?
2. Why does this matter right now?
3. What should readers do/think/feel after?
4. What evidence supports this?
5. Any stories or case studies?
6. Main counterarguments?
7. How should it open?
8. Key sections (3-5)?
9. How should it close?
10. Primary audience and technical level?
11. Desired tone?
```
**Checkpoint 2**: Review interview summary, add missing details
---
### Phase 3: Content Planning & Outline
**Goal**: Create a clear structure before writing
**Process**:
1. Create outline based on:
- Interview responses
- Content type structure (email: intro + points + ask, blog: hook + body + conclusion)
- Voice profile preferences (e.g., blog uses chronological flow, staff quotes)
2. Apply voice-specific patterns:
- Email: Opening pattern, bullet points for key points, clear ask
- Blog: Subheadings for scannability, narrative flow, reflective close
- Social: Hook first line, call-to-action
3. Suggest length from profile:
- Email avg: Check profile examples
- Blog avg: Check profile examples
- Social: Platform limits (LinkedIn 1300 chars, Twitter 280 chars)
**Email Outline Example**:
```
## Email Plan
**Subject**: [Based on purpose]
**Opening**: [Use opening pattern from profile, e.g., "I've reviewed {topic}..."]
**Body**:
- Point 1: [From interview]
- Point 2: [From interview]
- Point 3: [From interview]
**Ask**: [Specific call-to-action from interview]
**Closing**: [Use closing pattern from profile, e.g., "Let me know if..."]
**Tone**: Direct, professional, action-oriented
**Length**: ~200 words (typical for email_work)
```
**Blog Outline Example**:
```
## Blog Plan
**Title**: [Derived from central message]
**Structure**:
1. Opening: [Hook strategy - context-setting or reflective quote]
2. Background & Context
3. [Main section 1]
4. [Main section 2]
5. [Main section 3]
6. Impact & Results
7. Closing: [Forward-looking reflection]
**Voice elements**:
- Staff quotes (use throughout)
- Chronological narrative flow
- Subheadings for scannability
- Accessible but authoritative tone
**Length**: ~850 words (typical for blog_technical)
```
**Checkpoint 3**: User approves outline
---
### Phase 4: Draft Generation
**Goal**: Write content that authentically sounds like you
**Process**:
1. Load identity context:
```bash
cat ~/Library/Mobile\ Documents/com~apple~CloudDocs/Geoffrey/knowledge/identity-core.json
```
Use for personality alignment:
- `communication_preferences.style` → Direct, no-nonsense, concise
- `decision_framework` → Analytical, evidence-based
- `telos_summary.top_3_values` → Equity, excellence, empathy
2. Apply voice characteristics as generation guidelines:
- **Tone**: From `voice_characteristics.tone`
- **Sentence structure**: From `voice_characteristics.sentence_structure`
- **Vocabulary**: Common terms, avoided terms
- **Formatting**: Bullet points, markdown, emphasis patterns
- **Opening**: Use patterns from `opening_patterns`
- **Closing**: Use patterns from `closing_patterns`
- **Argument structure**: Lead with conclusion, use evidence
3. Write content naturally:
- Use Geoffrey's native writing capabilities
- Guided by voice profile (not rigid pattern matching)
- Weave in interview content (examples, data, stories)
- Match typical length from profile examples
4. Reference example emails/posts from profile for inspiration
**Generation Approach** (Hybrid):
- Write naturally with rich voice context
- Don't mechanically apply patterns
- Let voice characRelated in Image & Video
watch
IncludedWatch a video (URL or local path). Downloads with yt-dlp, extracts auto-scaled frames with ffmpeg, pulls the transcript from captions (or Whisper API fallback), and hands the result to Claude so it can answer questions about what's in the video.
physical-ai-defect-image-generation
IncludedUse when the user wants to orchestrate defect image generation, run associated setup, or handle outputs on OSMO. The Day 0 path handles cold-start with USD-to-ROI, image-edit augmentation, and AnomalyGen to create initial PCBA datasets. The Day 1 path performs inference and labeling on real images. This skill helps with first-time asset setup, creation of finetuning checkpoints, and configuring deployment. Trigger keywords: defect image generation, dig workflow, dig pipeline, defect image detection workflow, aoi pipeline, aoi anomalygen, usd2roi anomalygen, day 0 pcba, day 1 pcba, day 1 real-photo alignment, day 1 manual roi, metal surface anomaly, glass defect, anomalygen finetune, setup_pcb, setup_metal, setup_glass, setup_pretrained, dig setup, dig datasets, dig pretrained checkpoint, dig image-edit endpoint.
accelint-react-best-practices
IncludedReact performance optimization and best practices. ALWAYS use this skill when working with any React code - writing components, hooks, JSX; refactoring; optimizing re-renders, memoization, state management; reviewing for performance; fixing hydration mismatches; debugging infinite re-renders, stale closures, input focus loss, animations restarting; preventing remounting; implementing transitions, lazy initialization, effect dependencies. Even simple React tasks benefit from these patterns. Covers React 19+ (useEffectEvent, Activity, ref props). Triggers - useEffect, useState, useMemo, useCallback, memo, inline components, nested components, components inside components, re-render, performance, hydration, SSR, Next.js, useDeferredValue, combined hooks.
elevenlabs-agents
IncludedBuild conversational AI voice agents with ElevenLabs Platform using React, JavaScript, React Native, or Swift SDKs. Configure agents, tools (client/server/MCP), RAG knowledge bases, multi-voice, and Scribe real-time STT. Use when: building voice chat interfaces, implementing AI phone agents with Twilio, configuring agent workflows or tools, adding RAG knowledge bases, testing with CLI "agents as code", or troubleshooting deprecated @11labs packages, Android audio cutoff, CSP violations, dynamic variables, or WebRTC config. Keywords: ElevenLabs Agents, ElevenLabs voice agents, AI voice agents, conversational AI, @elevenlabs/react, @elevenlabs/client, @elevenlabs/react-native, @elevenlabs/elevenlabs-js, @elevenlabs/agents-cli, elevenlabs SDK, voice AI, TTS, text-to-speech, ASR, speech recognition, turn-taking model, WebRTC voice, WebSocket voice, ElevenLabs conversation, agent system prompt, agent tools, agent knowledge base, RAG voice agents, multi-voice agents, pronunciation dictionary, voice speed control, elevenlabs scribe, @11labs deprecated, Android audio cutoff, CSP violation elevenlabs, dynamic variables elevenlabs, case-sensitive tool names, webhook authentication
humanizer
IncludedHumanize AI-generated text by detecting and removing patterns typical of LLM output. Rewrites text to sound natural, specific, and human. Uses 28 pattern detectors, 560+ AI vocabulary terms across 3 tiers, and statistical analysis (burstiness, type-token ratio, readability) for comprehensive detection. Use when asked to humanize text, de-AI writing, make content sound more natural/human, review writing for AI patterns, score text for AI detection, or improve AI-generated drafts. Covers content, language, style, communication, and filler categories.
generating-mermaid-diagrams
IncludedSalesforce architecture diagrams using Mermaid with ASCII fallback. Use this skill when generating text-based diagrams for Salesforce architecture, OAuth flows, ERDs, integration sequences, or Agentforce structure. TRIGGER when: user says "diagram", "visualize", "ERD", or asks for sequence diagrams, flowcharts, class diagrams, or architecture visualizations in Mermaid. DO NOT TRIGGER when: user wants PNG/SVG image output (use generating-visual-diagrams), or asks about non-Salesforce systems.