humanize
Humanize & Compress — Orchestrator
Communication — Horizontal. Coordinates specialized sub-agents to strip AI patterns, inject brand voice, and compress content so it reads like a human wrote it and an editor approved it.
Core Question: "Would a human editor believe a human wrote this — and would they cut nothing?"
Critical Gates — Read First
- Do NOT skip the pattern scan. Step 2 (strip) needs the diagnosis. Without it, strip-agent is guessing.
- ZERO em dashes in final output. Absolute prohibition. No exceptions, no edge cases. Every em dash becomes a comma, period, or parentheses.
- Voice injection WITHOUT stripping first = polishing AI-generated prose. Strip always comes first. The soul-injection agent receives clean text, not AI-patterned text.
- Content type matters. Documentation gets a lighter touch than marketing copy. Check the Content Type Calibration table before dispatching.
Philosophy
AI-generated content fails in three ways: it reads like AI wrote it (patterns), it sounds like nobody wrote it (no voice), and it says too much with too little (bloat). This orchestrator fixes all three in order: detect, strip, voice, compress, verify. Each concern gets a specialist agent. The critic ensures nothing ships below the bar.
Inputs Required
- Any content artifact (from
copywriting,lp-optimization, or any other skill) or raw text
Output
.agents/mkt/content/[slug].humanized.md
Quality Gate
Before delivering, the critic agent verifies:
- Zero Hard Tell patterns from the 37-pattern checklist
- At most 2 Soft Tell patterns in the entire piece
- No clusters of 3+ high-frequency AI vocabulary words in any paragraph
- At least 15% word reduction from original
- No unique ideas, data, examples, or nuance removed (check against original)
- Read aloud with no stumbles, no robotic rhythm
- Every paragraph contains at least one concrete fact, number, or named example
Absolute Prohibitions (zero tolerance, no exceptions)
These patterns are so strongly associated with AI that a single instance ruins credibility:
- No em dashes (---). Replace every em dash with a comma, period, or parentheses. Restructure the sentence if needed. Zero em dashes in final output.
- No "it's not just X, it's Y" or any variant ("not because X, because Y", "X isn't the problem, Y is", "stops being X and starts being Y"). State the positive claim directly.
- No rhetorical questions as hooks. Never use "Why?", "The best part?", "Sound familiar?", "So what does this mean?" or any standalone question designed to create false suspense. State the point.
- No colons in prose. Do not use colons to introduce lists, explanations, or dramatic reveals in marketing copy or blog content. Restructure into natural sentences.
- No "actually" as emphasis. "X that actually Y" is an AI tell. Delete "actually" or rewrite the sentence.
- No filler context phrases. "In today's [anything]", "in the competitive business environment", "rapidly changing", "in an increasingly [anything] world." Delete the entire phrase or sentence.
- No emojis. Not in any content type.
- No unsourced 47 or 73. These are known LLM number biases. Any instance of 47 or 73 in the output must have a cited real-world source. If the number was generated, replace with actual data or remove entirely.
- No staccato taglines. "Your X, Y'd" ("Your Workflows, Mapped") and "X. Y." ("Analytics. Simplified.") are fragmentary headline constructions so overused by AI they are an instant fingerprint. Rewrite with a specific claim that communicates something real.
Chain Position
Horizontal — works on output from any skill. If content passed the copywriting skill, humanize focuses on compression + residual patterns. For external or AI-generated content, full pipeline applies.
Re-run triggers: When brand voice adjectives change, when upstream copy consistently triggers AI detection, or when voice injection guidance is updated.
Skill Deference
- Need new copy written from scratch? Use
copywriting— this skill cleans existing content, not creates new. - Conversion optimization needed? Use
lp-optimization— this skill focuses on voice and AI pattern removal, not conversion mechanics. - Content already passed the copywriting skill? Focus on compression + residual AI patterns only — skip full audit if copywriting agents already ran.
Agent Manifest
| Agent | Layer | File | Focus |
|---|---|---|---|
| Pattern Scanner | 1 (parallel) | agents/pattern-scanner-agent.md |
Runs all 37 AI patterns, logs violations by category, estimates compression potential |
| Voice Extractor | 1 (parallel) | agents/voice-extractor-agent.md |
Reads voice adjectives, assesses register, identifies injection opportunities |
| Strip Agent | 2 (sequential) | agents/strip-agent.md |
Surgical removal of flagged AI patterns — subtract only, no style changes |
| Soul Injection | 2 (sequential) | agents/soul-injection-agent.md |
Applies brand voice — rhythm, specificity, experience markers |
| Compression | 2 (sequential) | agents/compression-agent.md |
Systematic 15-30% compression at sentence, paragraph, section levels |
| Critic | 2 (final) | agents/critic-agent.md |
Three-pass audit, 5-dimension scoring, PASS/FAIL with re-dispatch routing |
Routing Logic
Classify the task, then follow the matching route.
Route A: Quick Humanize (short text)
When: Text is under 200 words. Voice injection and compression have limited impact on short content.
1. Pre-dispatch: Gather context (Step 0 below)
2. LAYER 1 — Dispatch ONE agent:
- pattern-scanner-agent (voice-extractor skipped — short text)
3. LAYER 2 — Dispatch SEQUENTIALLY:
- strip-agent (receives pattern-scanner output + original text)
- critic-agent (receives strip-agent output — skip soul-injection + compression)
4. If critic returns FAIL → re-dispatch strip-agent with feedback (max 2 cycles)
5. Deliver artifact
Note: Route A skips voice-extractor, soul-injection, and compression agents. For texts under 200 words, pattern removal is the primary value. If the user requests voice injection on short text, upgrade to Route B.
Route B: Full Humanize
When: Text is 200+ words and needs the full treatment (pattern removal + voice + compression).
1. Pre-dispatch: Gather context (Step 0 below)
2. LAYER 1 — Dispatch IN PARALLEL:
- pattern-scanner-agent
- voice-extractor-agent
3. Present diagnosis to user: Show pattern counts, top 3 patterns, compression estimate.
Ask: "Proceed with all fixes, or review the flagged patterns first?"
4. LAYER 2 — Dispatch SEQUENTIALLY:
- strip-agent (receives pattern-scanner output + original text)
- soul-injection-agent (receives strip-agent output + voice-extractor profile)
- compression-agent (receives soul-injection output)
- critic-agent (receives compression output)
5. If critic returns FAIL → re-dispatch named agent(s) with feedback (max 2 cycles)
6. Deliver final artifact
Route C: Called by Another Skill
When: Invoked by lp-optimization, copywriting, or another skill for inline humanization.
1. Pre-dispatch: Read context from calling skill's artifacts
2. If content already passed copywriting's Seven-Sweeps:
- Skip pattern-scanner (patterns already cleaned)
- Dispatch compression-agent (receives the text directly)
- Dispatch critic-agent
3. Otherwise: Follow Route B (full pipeline)
4. Return humanized output to the calling skill
Content Type Calibration
This skill's examples are marketing-focused, but it works on any content type. Adjust the intensity of each step by content type:
| Content Type | Strip Intensity | Voice Injection | Compression Target |
|---|---|---|---|
| Marketing copy | Full — all 37 patterns | Full — brand voice adjectives | 20-30% |
| Blog posts / thought leadership | Full | Moderate — author voice, not brand voice | 15-25% |
Short outbound — content-type: "short-outbound" (cold email, DM, proposal) |
Light — AI telltales only | Full — sender voice | 0-10% (already compressed; further cuts kill specificity) |
| Documentation / technical writing | Light — focus on clarity patterns only | Minimal — accuracy over personality | 10-15% |
| Internal communications | Moderate | Light — conversational, not branded | 15-20% |
| Academic / research | Light — remove only Hard Tells | None — maintain formal register | 5-10% |
Key principle: The further from marketing, the lighter the touch. Documentation that sounds like a blog post is worse than documentation with a few AI tells. Short outbound (cold email, DM, Upwork proposal) is a special case: it's typically 4-6 sentences with a named entity + number doing heavy lifting — compress further and you strip the thing that earns the reply.
Protected tokens (short-outbound only): When called by cold-outreach, the caller passes a protected_tokens list of named entities and numbers that must appear verbatim in the final output. Do not paraphrase, round, or remove these.
Pre-Dispatch
Before dispatching agents, run the Pre-Dispatch protocol. Two flows: Warm Start (most context resolvable, summarize and dispatch) or Cold Start (bundle 3-question prompt). Full pattern + anti-patterns: meta-skills/references/pre-dispatch-protocol.md.
Needed dimensions
- Original text + content type (always required as input — not asked)
- Target voice — adjectives or a brand reference (decides soul-injection-agent's lever)
- Compression target — light / moderate / heavy (decides compression-agent's lever)
- Register preservation — keep formal vs neutralize (decides strip-agent's intensity)
Read order
- Pipeline:
brand/BRAND.md→ voice rules + lexicon.research/product-context.md→ voice adjectives. - Experience:
.agents/experience/brand.md→ voice notes from prior runs. - Conversation context: brief from upstream skill (e.g., copywriting handed text directly).
If research/product-context.md date is >30 days, warn and recommend re-running icp-research for fresh voice adjectives — brand voice evolves.
Warm Start (most dimensions resolvable)
Found:
- brand voice → "[3 adjectives from BRAND.md]"
- content type → "[blog | landing page | docs | email | social]"
Defaults applied: compression=moderate, register=preserve.
Override anything, or proceed?
If user proceeds, dispatch. Optional inline probe only if the content type genuinely couldn't be inferred from the input.
Cold Start (no voice context)
Humanize strips AI patterns and injects voice. To make the output sound like
*you* (not generic-clean), I need a quick read on:
1. **Target voice** — 3 adjectives (e.g., "blunt, specific, dry") OR a reference
brand whose voice you'd want to match OR point me at `brand/BRAND.md` if it
exists.
2. **Preserve register?** — If the source is technical/formal/legal, keep it
that way (yes), or neutralize toward a more conversational baseline (no)?
3. **Compression target** — Light (10-15%, light-touch), Moderate (20-30%,
default), or Heavy (30%+, aggressive).
Answer 1-3 in one response. I'll dispatch.
Write-back
After cold-start answers, append to experience/:
| Question | File | Key |
|---|---|---|
| 1. Target voice | brand.md |
Voice — adjectives (only if 3-adjective form, not when pointing at BRAND.md) |
| 2-3. Routing only | (not persisted) | — |
Pre-Writing Assembly
After Pre-Dispatch resolves, compile these fields and pass to every agent in the pre-writing input:
- Content type — blog, landing page, docs, email, social
- Voice adjectives — from BRAND.md / experience / cold-start (or defaults: "clear, specific, human")
- Audience register — formal, professional, conversational, casual
- Original word count — for compression tracking
- Source — which skill or external source produced the content
- User directives — patterns to keep, intensity preferences
Dispatch Protocol
How to spawn a sub-agent
For each agent dispatched below, use the Agent tool with a prompt constructed as follows:
- Read the agent instruction file (e.g.,
agents/pattern-scanner-agent.md) — include its FULL content in the Agent prompt - Append the brief and pre-writing context after the instructions
- Resolve file paths to absolute: replace relative paths with absolute paths rooted at this skill's directory. Example: if this skill is at
/Users/you/skills/humanize/, thenreferences/ai-patterns.mdbecomes/Users/you/skills/humanize/references/ai-patterns.md. Tell the agent: "Read the reference file at [absolute path] for domain knowledge." - Pass upstream artifacts by content, not path: the orchestrator reads
research/product-context.mdFIRST, then includes relevant excerpts (voice adjectives, audience register) in the pre-writing object. Sub-agents should NOT read artifact files directly — the orchestrator curates what they need. - If feedback exists (from a critic FAIL cycle), append it at the end of the prompt with the header "## Critic Feedback — Address Every Point"
Single-agent fallback
If multi-agent dispatch is unavailable (no Agent tool, single-agent runtime, or context constraints), execute each agent's instructions sequentially in-context:
- Layer 1: Run pattern-scanner-agent's detection logic on the text. Then run voice-extractor-agent's profile logic.
- Layer 2: Apply strip-agent's fixes, then soul-injection-agent's voice techniques, then compression-agent's rules.
- Critic: Self-evaluate using the critic-agent's three-pass rubric and quality gate.
The output quality should be equivalent — the multi-agent pattern optimizes for parallelism and focus, not capability.
Layer 1: Parallel Diagnosis
Spawn the following agents IN PARALLEL (multiple Agent tool calls in a single message). For each agent, follow the Dispatch Protocol above.
| Agent | Instruction File | Pass These Inputs | Reference Files to Resolve |
|---|---|---|---|
| Pattern Scanner | agents/pattern-scanner-agent.md |
brief (the text to humanize) + pre-writing (content type) | references/ai-patterns.md |
| Voice Extractor | agents/voice-extractor-agent.md |
brief (the text to assess) + pre-writing (voice adjectives, audience) | references/voice-injection.md |
After both agents return, present the diagnosis to the user before proceeding to Layer 2:
- Show Hard Tell count vs. Soft Tell count
- Show top 3 most impactful patterns with examples from their text
- Show estimated compression potential
- Show voice register assessment and gap
Ask: "Proceed with all fixes, or review the flagged patterns first?"
If the user wants to review, walk through each flagged pattern and confirm which to fix vs keep. Pass the user's decisions to strip-agent as part of the pre-writing context.
Layer 2: Sequential Pipeline
Dispatch these agents ONE AT A TIME, IN ORDER using the Dispatch Protocol above. Each receives the previous agent's full output as the upstream field.
strip-agent → soul-injection-agent → compression-agent → critic-agent
| Step | Agent | Instruction File | Receives |
|---|---|---|---|
| 1 | Strip Agent | agents/strip-agent.md |
Pattern-scanner output (upstream) + original text (brief) + user-approved keeps (pre-writing) |
| 2 | Soul Injection | agents/soul-injection-agent.md |
Strip-agent output (upstream) + voice-extractor profile (pre-writing) |
| 3 | Compression | agents/compression-agent.md |
Soul-injection output (upstream) + content type targets (pre-writing) |
| 4 | Critic | agents/critic-agent.md |
Compression output (upstream) + original text for comparison (brief) |
Each agent returns the full document with their edits applied + a change log. The orchestrator passes the complete output (text + log) to the next agent.
Critic Gate
The critic agent returns one of two verdicts:
PASS
The text meets all quality standards. Score is 35/50 or above. Zero absolute prohibition violations. Deliver the critic's approved output as the final artifact.
FAIL
The critic returns specific failures with:
- Which text failed and on which dimension
- Specific fix instructions
- Which agent to re-dispatch
Rewrite loop:
- Read the critic's failure report
- Re-dispatch ONLY the named agent(s) with the critic's feedback attached as the
feedbackinput - Run the modified output back through the critic
- Maximum 2 rewrite cycles. After 2 failures, deliver the text with the critic's annotations and flag to the user: "Text scored [X]/50 — manual review recommended on [specific issues]."
Artifact Template
---
skill: humanize
version: 1
date: [today's date]
status: done | done_with_concerns | blocked | needs_context
compression: [X]%
---
# Humanized: [Original Title]
## Humanization Summary
| Metric | Value |
|--------|-------|
| Words (original) | [count] |
| Words (humanized) | [count] |
| Compression | [X]% |
| AI patterns found | [count] |
| AI patterns fixed | [count] |
| Hard Tells remaining | 0 |
| Soft Tells remaining | [0-2] |
| Quality score | [X]/50 (Di:[n] R:[n] T:[n] A:[n] De:[n]) |
## Change Log
| Location | Original | Change | Rule |
|----------|----------|--------|------|
| [para/section] | "[original text]" | "[new text]" or [deleted] | Pattern #[N] / Compression / Voice |
---
[Humanized content here]
On re-run: rename existing artifact to
[slug].humanized.v[N].mdand create new with incremented version.
Next Step
Content is ready for publishing.
Worked Example — Full Humanize (Route B)
Input: AI-generated SaaS onboarding blog post, 178 words. Content type: blog post.
Step 0: Pre-Dispatch
- Content type: blog post (strip: full, voice: moderate, compression: 15-25%)
- Voice adjectives: "direct, warm, technical" (from product-context.md)
- Original word count: 178
Layer 1: Parallel Dispatch
Pattern Scanner returns:
- 8 Hard Tells found, 2 Soft Tells
- Top 3: throat-clearing intro (#21, 1 instance), paired synonyms (#6, 2 instances), em dash (#12, 1 instance)
- Absolute prohibitions: 1 em dash, 1 filler context phrase
- Estimated compression: 40-50%
Voice Extractor returns:
- Voice profile: direct (short sentences, imperatives), warm (inclusive pronouns), technical (domain-specific)
- Current register: formal/generic. Target: professional/conversational
- Sterility: all 6 signs present — uniform sentence length, no experience markers, no fragments, any-brand paragraphs
- 5 injection opportunities flagged (specificity, rhythm, reader presence)
User Checkpoint
"Found 8 Hard Tells and 2 Soft Tells. Top issues: throat-clearing intro, paired synonyms, em dash. Estimated 40-50% compression potential. Proceed with all fixes?"
User confirms. Proceed to Layer 2.
Layer 2: Sequential Dispatch
Strip Agent receives pattern-scanner output + original text:
Removes "In today's rapidly evolving SaaS landscape," (throat-clearing). Picks "critical" from "critical and essential" (paired synonym). Removes em dash + -ing phrase. Removes "It's important to note that" (hedge). Removes "In conclusion" (formulaic). Removes "Start building..." (permission-seeking). Word count: 178 to 112.
Soul Injection receives strip output + voice profile:
Leads with the data point (50% retention). Adds Intercom example with specific numbers. Replaces "companies" with named company. Varies rhythm: 11, 4, 18, 9 word sentences. Adds reader presence. Word count: 112 to 108 (net reduction from specificity replacing wordier abstractions).
Compression receives soul-injection output:
Applies filler phrase compression ("The key takeaway is that" deleted). Merges setup + conclusion into single sentence. Word count: 108 to 91.
Critic receives compression output:
Pass 1: Zero Hard Tells. 0 Soft Tells. Vocabulary clean. Density: every paragraph has facts. Meaning preserved. Compression: 49%. Pass 2: "What still sounds AI?" Nothing flagged. No quotables. Read-aloud clean. Pass 3: Directness 8, Rhythm 8, Trust 8, Authenticity 7, Density 9. Total: 40/50. PASS.
Final Output (91 words, 49% compression)
SaaS companies with structured onboarding retain 50% more users. Yet most treat it as a product tour and stop there.
Onboarding that works combines triggered emails based on usage gaps, in-app guidance tied to the user's workflow (not a generic checklist), and human support when activation stalls. Intercom's onboarding rebuild in 2024 cut their time-to-value from 14 days to 3 by replacing their 12-step tour with two targeted nudges.
Less coverage, more precision. Guide users to one aha-moment fast, then expand.
Change Annotation
| Location | Original | Change | Rule |
|---|---|---|---|
| Para 1, S1 | "In today's rapidly evolving SaaS landscape" | Deleted | Pattern #21 (throat-clearing intro) |
| Para 1, S1 | "critical and essential" | "critical" then restructured | Pattern #6 (paired synonyms) |
| Para 1, S1 | "has become a critical component of..." | Lead with the data point instead | Compression: setup elimination |
| Para 1, S3 | "more quickly and efficiently" | Deleted (paired synonyms + filler) | Pattern #6, Compression |
| Para 2, S1 | "It's important to note that" | Deleted | Pattern #8 (hedge) + Compression |
| Para 2, S2 | "a seamless and intuitive experience" | Restructured with specifics | Pattern #6 + AI vocabulary ("seamless") + Voice: specificity |
| Para 3, S1 | "In conclusion" | Deleted | Pattern #5 (formulaic structure) + #25 (generic positive conclusion) |
| Para 3, S3 | "Start building... see the difference!" | Replaced with actionable takeaway | Pattern #20 (permission-seeking) + Pattern #11 (exclamation) |
| Throughout | Generic claims | Added Intercom example | Voice: specificity as personality |
| --- | 178 words to 91 words | 49% compression | --- |
Anti-Patterns
Skipping the pattern scan — Dispatching strip-agent without a diagnosis. Strip-agent needs the violation log as its work order. Without it, edits are guesswork. INSTEAD: always run pattern-scanner-agent first.
Voice injection before stripping — Applying brand voice to AI-patterned text. You are polishing a turd. The voice injection agent expects clean, pattern-free input. INSTEAD: strip first, inject second. Always.
Mechanical pattern-matching without judgment — Not every instance of a Soft Tell pattern needs fixing. A single hedge before a genuinely uncertain claim is honest. Use the checklist as a detection tool, not a find-and-replace script. Exception: the 8 Absolute Prohibitions are always enforced with zero tolerance. INSTEAD: fix Hard Tells and Absolute Prohibitions unconditionally; apply judgment to Soft Tells.
Sterile output — Content that has been stripped of AI patterns but has no personality. If the output reads like a legal document, soul-injection-agent was skipped or under-applied. Clean does not equal good. INSTEAD: always run soul-injection-agent after strip-agent (Route B).
Surface compression — Cutting depth instead of filler. Removing a data point to save 8 words is the opposite of what compression should do. INSTEAD: check every deletion against the Depth Preservation Rules in conciseness-rules.md.
Voice cosplay — Injecting a personality that does not match the brand. A fintech compliance tool should not sound like a DTC sneaker brand. INSTEAD: read the voice adjectives from product-context.md. They are constraints, not suggestions.
One-pass editing — Running all steps simultaneously. Each step has a different focus: detect, strip, voice, compress, verify. Combining them produces worse results because you are optimizing for conflicting goals simultaneously. INSTEAD: follow the sequential pipeline. Each agent has one job.
Ignoring the critic's FAIL — If the critic fails the text, the orchestrator MUST re-dispatch. Delivering failed text to the user breaks the quality contract. INSTEAD: re-dispatch the named agent(s) with the critic's feedback. Max 2 cycles, then deliver with annotations.
Destroying structure in the name of conciseness — Removing all subheadings, merging all sections, eliminating all lists because "shorter is better." Structure aids scanning. INSTEAD: compress within structure before eliminating structure.
Over-compressing introductions — The opening carries disproportionate weight. A 50% compressed intro that loses its hook is worse than a 20% compressed intro that keeps it. INSTEAD: compress introductions last and most carefully.
Completion Status
Every run ends with explicit status:
- DONE — patterns stripped, voice injected (Route B), compression applied, critic 5-dimension PASS
- DONE_WITH_CONCERNS — humanized but critic flagged a dimension under threshold (voice consistency, specificity, or rhythm); annotations preserved in artifact
- BLOCKED — original text contains structural problems beyond pattern removal (factual errors, broken logic, missing claims); humanize cannot fix what isn't there
- NEEDS_CONTEXT — voice reference unavailable for Route B (no brand voice file or sample, user can't describe target voice); recommend
brand-systemor supply samples
Agent Files
Sub-Agent Instructions (agents/)
- agents/pattern-scanner-agent.md — Scans all 37 AI patterns, logs violations, estimates compression
- agents/voice-extractor-agent.md — Reads voice adjectives, assesses register, identifies injection opportunities
- agents/strip-agent.md — Surgical removal of flagged AI patterns
- agents/soul-injection-agent.md — Applies brand voice through rhythm, specificity, experience markers
- agents/compression-agent.md — Systematic compression at sentence, paragraph, section levels
- agents/critic-agent.md — Three-pass audit, 5-dimension scoring, PASS/FAIL gate
- agents/_template.md — Reusable template for creating new agent files
Shared References (references/)
- references/ai-patterns.md — 37 AI writing patterns across 8 categories + high-frequency vocabulary and phrase lists; detection, examples, fixes, severity (pattern-scanner, strip, critic)
- references/voice-injection.md — Voice adjective framework, rhythm, specificity, personality injection (voice-extractor, soul-injection)
- references/conciseness-rules.md — Compression techniques at sentence, paragraph, and section level (compression-agent)
More from hungv47/marketing-skills
brand-system
Builds brand identity systems as three artifacts — BRAND.md (story, voice, positioning, archetype), DESIGN.md (AI-readable design system with palettes, tokens, components, motion), and ASSETS.md (per-platform production inventory with auto-scanned checkboxes for what's done vs. still needed). Not for writing marketing copy (use copywriting) or mapping user flows (use user-flow). For campaign planning, see campaign-plan. For audience research, see icp-research.
19seo
Audits and plans search visibility — keyword research, on-page optimization, technical SEO, link building strategy, and AI search optimization. Produces `.agents/mkt/seo-[mode].md`. Not for landing page conversion (use lp-optimization) or writing copy (use copywriting).
18lp-optimization
Audits a landing page for conversion — analyzes hero, CTA, social proof, objection handling, and page flow. Produces specific copy and structure change recommendations. Not for designing A/B test variants or full site SEO audits (use seo). For brand identity and design tokens, see brand-system. For content strategy, see campaign-plan.
18vn-tone
Polishes already-translated Vietnamese text so it reads natively in a target register (báo chí, semi-casual, bro, or pop-marketing). Fixes pronoun drift, missing particles, literal idioms, passive-voice calques, typography, and corporate translationese. Post-translation polish pass only — does NOT translate from other languages. For tone work on English/other languages, see humanize. Produces `.agents/mkt/content/[slug].vn-tone.md`.
16copywriting
Writes and evaluates persuasive copy — headlines, hooks, CTAs, taglines, and full-page section copy with rubric scoring, annotations, and ranked alternatives. Produces inline annotations or `.agents/mkt/content/[slug].copy.md`. Not for editing AI-sounding text (use humanize). For brand voice guidelines, see brand-system. For landing page conversion audits, see lp-optimization.
16imc-plan
Creates integrated marketing plans — channel strategy, positioning, content calendar, budget allocation, and go-to-market timelines. Produces `.agents/mkt/imc-plan.md`. Not for writing actual content (use content-create) or setting numeric targets (use funnel-planner). For SEO strategy, see seo. For landing page optimization, see lp-optimization.
15