From 635fcbd71566a2403bcb9bdbf2b3fef35ce189fb Mon Sep 17 00:00:00 2001 From: Affaan Mustafa Date: Thu, 2 Apr 2026 15:45:19 -0700 Subject: [PATCH] refactor: consolidate writing voice rules --- .agents/skills/article-writing/SKILL.md | 37 +++-------------------- .agents/skills/content-engine/SKILL.md | 36 +++++----------------- .agents/skills/crosspost/SKILL.md | 10 ++---- .agents/skills/investor-outreach/SKILL.md | 6 +++- WORKING-CONTEXT.md | 1 + skills/article-writing/SKILL.md | 37 +++-------------------- skills/content-engine/SKILL.md | 36 +++++----------------- skills/crosspost/SKILL.md | 10 ++---- skills/investor-outreach/SKILL.md | 6 +++- 9 files changed, 39 insertions(+), 140 deletions(-) diff --git a/.agents/skills/article-writing/SKILL.md b/.agents/skills/article-writing/SKILL.md index 1a890610..6cf4339c 100644 --- a/.agents/skills/article-writing/SKILL.md +++ b/.agents/skills/article-writing/SKILL.md @@ -23,50 +23,23 @@ Write long-form content that sounds like an actual person with a point of view, 4. Use proof instead of adjectives. 5. Never invent facts, credibility, or customer evidence. -## Voice Capture Workflow +## Voice Handling -If the user wants a specific voice, collect one or more of: -- published articles -- newsletters -- X posts or threads -- docs or memos -- launch notes -- a style guide - -Then extract: -- sentence length and rhythm -- whether the writing is compressed, explanatory, sharp, or formal -- how parentheses are used -- how often the writer asks questions -- whether the writer uses fragments, lists, or hard pivots -- formatting habits such as headers, bullets, code blocks, pull quotes -- what the writer clearly avoids +If the user wants a specific voice, run `brand-voice` first and reuse its `VOICE PROFILE`. +Do not duplicate a second style-analysis pass here unless the user explicitly asks for one. If no voice references are given, default to a sharp operator voice: concrete, unsentimental, useful. -## Affaan / ECC Voice Reference - -When matching Affaan / ECC voice, bias toward: -- direct claims over scene-setting -- high specificity -- parentheticals used for qualification or over-clarification, not comedy -- capitalization chosen situationally, not as a gimmick -- very low tolerance for fake thought-leadership cadence -- almost no bait questions - ## Banned Patterns Delete and rewrite any of these: - "In today's rapidly evolving landscape" - "game-changer", "cutting-edge", "revolutionary" -- "no fluff" -- "not X, just Y" - "here's why this matters" as a standalone bridge - fake vulnerability arcs - a closing question added only to juice engagement -- forced lowercase -- corny parenthetical asides - biography padding that does not move the argument +- generic AI throat-clearing that delays the point ## Writing Process @@ -101,6 +74,6 @@ Delete and rewrite any of these: Before delivering: - factual claims are backed by provided sources - generic AI transitions are gone -- the voice matches the supplied examples +- the voice matches the supplied examples or the agreed `VOICE PROFILE` - every section adds something new - formatting matches the intended medium diff --git a/.agents/skills/content-engine/SKILL.md b/.agents/skills/content-engine/SKILL.md index d1678a1d..4467724a 100644 --- a/.agents/skills/content-engine/SKILL.md +++ b/.agents/skills/content-engine/SKILL.md @@ -38,50 +38,28 @@ Before drafting, identify the source set: If the user wants a specific voice, build a voice profile from real examples before writing. Use `brand-voice` as the canonical workflow when voice consistency matters across more than one output. -## Voice Capture Workflow +## Voice Handling -Run `brand-voice` first when: +`brand-voice` is the canonical voice layer. + +Run it first when: - there are multiple downstream outputs - the user explicitly cares about writing style - the content is launch, outreach, or reputation-sensitive -At minimum, produce a compact `VOICE PROFILE` covering: -- rhythm -- compression -- capitalization -- parenthetical use -- question use -- preferred moves -- banned moves - -Do not start drafting until the voice profile is clear enough to enforce. - -## Affaan / ECC Voice Reference - -When the user wants Affaan / ECC voice specifically, default to this unless newer examples clearly override it: -- direct, compressed, concrete -- strong preference for specific claims, numbers, mechanisms, and receipts -- parentheticals used to qualify, narrow, or over-clarify, not to do corny bits -- lowercase is optional, not mandatory -- questions are rare and should not be added as bait -- transitions should feel earned, not polished -- tone can be sharp or blunt, but should not sound like a content marketer +Reuse the resulting `VOICE PROFILE` here instead of rebuilding a second voice model. +If the user wants Affaan / ECC voice specifically, still treat `brand-voice` as the source of truth and feed it the best live or source-derived material available. ## Hard Bans Delete and rewrite any of these: - "In today's rapidly evolving landscape" - "game-changer", "revolutionary", "cutting-edge" -- "no fluff" -- "not X, just Y" - "here's why this matters" unless it is followed immediately by something concrete -- "Excited to share" -- fake curiosity gaps - ending with a LinkedIn-style question just to farm replies -- forced lowercase when the source voice does not call for it - forced casualness on LinkedIn -- parenthetical jokes that were not present in the source voice +- fake engagement padding that was not present in the source material ## Platform Adaptation Rules diff --git a/.agents/skills/crosspost/SKILL.md b/.agents/skills/crosspost/SKILL.md index 2c595fb9..e94df3c3 100644 --- a/.agents/skills/crosspost/SKILL.md +++ b/.agents/skills/crosspost/SKILL.md @@ -39,13 +39,8 @@ Use `content-engine` first if the source still needs voice shaping. Run `brand-voice` first if the source voice is not already captured in the current session. -Before adapting, note: -- how blunt or explanatory the source is -- whether the source uses fragments, lists, or longer transitions -- whether the source uses parentheses -- whether the source avoids questions, hashtags, or CTA language - -The adaptation should preserve that fingerprint. +Reuse the resulting `VOICE PROFILE` directly. +Do not build a second ad hoc voice checklist here unless the user explicitly wants a fresh override for this campaign. ### Step 3: Adapt by Platform Constraint @@ -91,7 +86,6 @@ Delete and rewrite any of these: - "Here's what I learned" - "What do you think?" - "link in bio" unless that is literally true -- "not X, just Y" - generic "professional takeaway" paragraphs that were not in the source ## Output Format diff --git a/.agents/skills/investor-outreach/SKILL.md b/.agents/skills/investor-outreach/SKILL.md index 9abef521..f34860e4 100644 --- a/.agents/skills/investor-outreach/SKILL.md +++ b/.agents/skills/investor-outreach/SKILL.md @@ -24,6 +24,11 @@ Write investor communication that is short, concrete, and easy to act on. 4. Stay concise. 5. Never send copy that could go to any investor. +## Voice Handling + +If the user's voice matters, run `brand-voice` first and reuse its `VOICE PROFILE`. +This skill should keep the investor-specific structure and ask discipline, not recreate its own parallel voice system. + ## Hard Bans Delete and rewrite any of these: @@ -31,7 +36,6 @@ Delete and rewrite any of these: - "excited to share" - generic thesis praise without a real tie-in - vague founder adjectives -- "no fluff" - begging language - soft closing questions when a direct ask is clearer diff --git a/WORKING-CONTEXT.md b/WORKING-CONTEXT.md index 7fb24edc..2cc027cd 100644 --- a/WORKING-CONTEXT.md +++ b/WORKING-CONTEXT.md @@ -111,3 +111,4 @@ Keep this file detailed for only the current sprint, blockers, and next actions. - 2026-04-01: Added `connections-optimizer` as the review-first social-graph reorganization workflow for X and LinkedIn, with explicit pruning modes, browser fallback expectations, and Apple Mail drafting guidance. - 2026-04-01: Added `manim-video` as the reusable technical explainer lane and seeded it with a starter network-graph scene so launch and systems animations do not depend on one-off scratch scripts. - 2026-04-02: Re-extracted `social-graph-ranker` as a standalone primitive because the weighted bridge-decay model is reusable outside the full lead workflow. `lead-intelligence` now points to it for canonical graph ranking instead of carrying the full algorithm explanation inline, while `connections-optimizer` stays the broader operator layer for pruning, adds, and outbound review packs. +- 2026-04-02: Applied the same consolidation rule to the writing lane. `brand-voice` remains the canonical voice system, while `content-engine`, `crosspost`, `article-writing`, and `investor-outreach` now keep only workflow-specific guidance instead of duplicating a second Affaan/ECC voice model or repeating the full ban list in multiple places. diff --git a/skills/article-writing/SKILL.md b/skills/article-writing/SKILL.md index 1a890610..6cf4339c 100644 --- a/skills/article-writing/SKILL.md +++ b/skills/article-writing/SKILL.md @@ -23,50 +23,23 @@ Write long-form content that sounds like an actual person with a point of view, 4. Use proof instead of adjectives. 5. Never invent facts, credibility, or customer evidence. -## Voice Capture Workflow +## Voice Handling -If the user wants a specific voice, collect one or more of: -- published articles -- newsletters -- X posts or threads -- docs or memos -- launch notes -- a style guide - -Then extract: -- sentence length and rhythm -- whether the writing is compressed, explanatory, sharp, or formal -- how parentheses are used -- how often the writer asks questions -- whether the writer uses fragments, lists, or hard pivots -- formatting habits such as headers, bullets, code blocks, pull quotes -- what the writer clearly avoids +If the user wants a specific voice, run `brand-voice` first and reuse its `VOICE PROFILE`. +Do not duplicate a second style-analysis pass here unless the user explicitly asks for one. If no voice references are given, default to a sharp operator voice: concrete, unsentimental, useful. -## Affaan / ECC Voice Reference - -When matching Affaan / ECC voice, bias toward: -- direct claims over scene-setting -- high specificity -- parentheticals used for qualification or over-clarification, not comedy -- capitalization chosen situationally, not as a gimmick -- very low tolerance for fake thought-leadership cadence -- almost no bait questions - ## Banned Patterns Delete and rewrite any of these: - "In today's rapidly evolving landscape" - "game-changer", "cutting-edge", "revolutionary" -- "no fluff" -- "not X, just Y" - "here's why this matters" as a standalone bridge - fake vulnerability arcs - a closing question added only to juice engagement -- forced lowercase -- corny parenthetical asides - biography padding that does not move the argument +- generic AI throat-clearing that delays the point ## Writing Process @@ -101,6 +74,6 @@ Delete and rewrite any of these: Before delivering: - factual claims are backed by provided sources - generic AI transitions are gone -- the voice matches the supplied examples +- the voice matches the supplied examples or the agreed `VOICE PROFILE` - every section adds something new - formatting matches the intended medium diff --git a/skills/content-engine/SKILL.md b/skills/content-engine/SKILL.md index d1678a1d..4467724a 100644 --- a/skills/content-engine/SKILL.md +++ b/skills/content-engine/SKILL.md @@ -38,50 +38,28 @@ Before drafting, identify the source set: If the user wants a specific voice, build a voice profile from real examples before writing. Use `brand-voice` as the canonical workflow when voice consistency matters across more than one output. -## Voice Capture Workflow +## Voice Handling -Run `brand-voice` first when: +`brand-voice` is the canonical voice layer. + +Run it first when: - there are multiple downstream outputs - the user explicitly cares about writing style - the content is launch, outreach, or reputation-sensitive -At minimum, produce a compact `VOICE PROFILE` covering: -- rhythm -- compression -- capitalization -- parenthetical use -- question use -- preferred moves -- banned moves - -Do not start drafting until the voice profile is clear enough to enforce. - -## Affaan / ECC Voice Reference - -When the user wants Affaan / ECC voice specifically, default to this unless newer examples clearly override it: -- direct, compressed, concrete -- strong preference for specific claims, numbers, mechanisms, and receipts -- parentheticals used to qualify, narrow, or over-clarify, not to do corny bits -- lowercase is optional, not mandatory -- questions are rare and should not be added as bait -- transitions should feel earned, not polished -- tone can be sharp or blunt, but should not sound like a content marketer +Reuse the resulting `VOICE PROFILE` here instead of rebuilding a second voice model. +If the user wants Affaan / ECC voice specifically, still treat `brand-voice` as the source of truth and feed it the best live or source-derived material available. ## Hard Bans Delete and rewrite any of these: - "In today's rapidly evolving landscape" - "game-changer", "revolutionary", "cutting-edge" -- "no fluff" -- "not X, just Y" - "here's why this matters" unless it is followed immediately by something concrete -- "Excited to share" -- fake curiosity gaps - ending with a LinkedIn-style question just to farm replies -- forced lowercase when the source voice does not call for it - forced casualness on LinkedIn -- parenthetical jokes that were not present in the source voice +- fake engagement padding that was not present in the source material ## Platform Adaptation Rules diff --git a/skills/crosspost/SKILL.md b/skills/crosspost/SKILL.md index 2c595fb9..e94df3c3 100644 --- a/skills/crosspost/SKILL.md +++ b/skills/crosspost/SKILL.md @@ -39,13 +39,8 @@ Use `content-engine` first if the source still needs voice shaping. Run `brand-voice` first if the source voice is not already captured in the current session. -Before adapting, note: -- how blunt or explanatory the source is -- whether the source uses fragments, lists, or longer transitions -- whether the source uses parentheses -- whether the source avoids questions, hashtags, or CTA language - -The adaptation should preserve that fingerprint. +Reuse the resulting `VOICE PROFILE` directly. +Do not build a second ad hoc voice checklist here unless the user explicitly wants a fresh override for this campaign. ### Step 3: Adapt by Platform Constraint @@ -91,7 +86,6 @@ Delete and rewrite any of these: - "Here's what I learned" - "What do you think?" - "link in bio" unless that is literally true -- "not X, just Y" - generic "professional takeaway" paragraphs that were not in the source ## Output Format diff --git a/skills/investor-outreach/SKILL.md b/skills/investor-outreach/SKILL.md index 9abef521..f34860e4 100644 --- a/skills/investor-outreach/SKILL.md +++ b/skills/investor-outreach/SKILL.md @@ -24,6 +24,11 @@ Write investor communication that is short, concrete, and easy to act on. 4. Stay concise. 5. Never send copy that could go to any investor. +## Voice Handling + +If the user's voice matters, run `brand-voice` first and reuse its `VOICE PROFILE`. +This skill should keep the investor-specific structure and ask discipline, not recreate its own parallel voice system. + ## Hard Bans Delete and rewrite any of these: @@ -31,7 +36,6 @@ Delete and rewrite any of these: - "excited to share" - generic thesis praise without a real tie-in - vague founder adjectives -- "no fluff" - begging language - soft closing questions when a direct ask is clearer