Studio Founder
How We Codified Bilal's Writing Voice and Made 31 Agents Speak It
How We Codified Bilal's Writing Voice and Made 31 Agents Speak It
Key Takeaway
We used the Brand Voice Extractor to analyze 6 months of my content, produce a quantified voice profile in JSON, and feed it to all 31 agents β resulting in 80% of readers unable to distinguish agent-written content from mine.
The Problem
I have a voice. Short sentences. Data first. Provocative framing. Cut the fluff.
When I write, people engage. When my agents wrote, people scrolled past. Same topics. Same platforms. Different energy. The content was technically correct but emotionally flat. It read like a smart intern summarizing my thoughts instead of me actually thinking.
The standard fix: write a brand voice guide. "Be conversational but professional. Use active voice. Avoid jargon." Useless. Every brand voice guide says the same nothing. LLMs trained on those guides produce the same nothing.
I needed something quantified. Not "be punchy" β how punchy? What's my average sentence length? What's my adjective-to-noun ratio? Which transition words do I actually use vs. the ones I think I use?
The Solution
Mr.Chief's Brand Voice Extractor. It reads actual content β not guidelines about content β and produces a machine-readable voice profile with quantified style markers.
We fed it 6 months of my LinkedIn posts, published articles, and Telegram messages to my team. It extracted patterns I didn't even know I had. Then we injected that profile into every content-producing agent's system prompt.
The Process (with code/config snippets)
Step 1: Corpus assembly. We pulled content from three sources:
yamlShow code
voice_extraction:
sources:
- type: linkedin_posts
count: 87
period: "2024-06 to 2024-12"
- type: published_articles
count: 12
period: "2024-06 to 2024-12"
- type: telegram_messages
count: 340
period: "2024-09 to 2024-12"
filter: "messages > 50 words" # Skip one-liners
total_words: ~62,000
Step 2: The extractor analyzes across multiple dimensions. Here's a simplified version of the output:
jsonShow code
{
"voice_profile": "bilal_pyratz_v3",
"tone": {
"primary": "provocative-analytical",
"secondary": "direct-impatient",
"avoids": ["corporate-safe", "hedge-heavy", "qualifier-laden"]
},
"sentence_structure": {
"avg_length": 11.3,
"short_ratio": 0.42,
"fragment_usage": "frequent",
"opener_patterns": ["statement-of-fact", "contrarian-claim", "number-first"]
},
"vocabulary": {
"level": "technical-accessible",
"jargon_density": 0.08,
"power_words": ["ruthless", "broken", "actually", "zero", "real"],
"banned_words": ["synergy", "leverage", "holistic", "robust", "scalable"],
"contraction_rate": 0.73
},
"formatting": {
"uses_lists": true,
"uses_bold": "heavily",
"uses_numbers": "in-every-post",
"paragraph_length": "1-3 sentences",
"uses_headers": "sparingly"
},
"rhetoric": {
"comparison_frequency": "high",
"uses_before_after": true,
"ends_with": ["provocative-question", "one-liner-summary", "call-to-action"],
"opens_with": ["contrarian-statement", "data-point", "problem-statement"]
}
}
Step 3: This profile gets injected into agent system prompts:
yamlShow code
# Agent content config
agents_using_voice:
- peiy # LinkedIn content
- bill # Blog writing
- jack # Design copy
- warren # Investor comms (modified β more formal)
voice_profile: "bilal_pyratz_v3"
voice_enforcement: strict # Reject outputs that score < 0.7 on voice match
Step 4: Validation. We ran a blind test with 15 people who follow my LinkedIn:
View details
Test: 10 posts β 5 written by me, 5 by agents with voice profile
Judges: 15 LinkedIn followers (mix of investors, founders, operators)
Method: "Which were written by Bilal vs. a ghostwriter?"
The Results
| Metric | Before Voice Profile | After Voice Profile |
|---|---|---|
| Avg sentence length (agent) | 18.7 words | 12.1 words |
| Fragment usage | 0.08 | 0.38 |
| Banned word occurrences | 3.2/post | 0.1/post |
| Blind test accuracy | 90% could tell | 20% could tell |
| LinkedIn engagement (agent posts) | 45 avg likes | 127 avg likes |
| Content production speed | 3 posts/week | 15 posts/week |
| Time Bilal spends editing | 20 min/post | 3 min/post |
| Voice match score | 0.41 | 0.83 |
The biggest discovery: I use sentence fragments 42% of the time. "Not this." "Zero." "Every single time." No brand voice guide would have captured that. The extractor did because it counted.
Try It Yourself
- Gather 50+ pieces of your own content (social posts, articles, emails)
- Run the Brand Voice Extractor β the more content, the more accurate the profile
- Review the output β you'll learn things about your own writing you didn't know
- Inject the JSON profile into your content agents' system prompts
- Run a blind test after 2 weeks β measure, don't assume
Your voice isn't what you think it is. It's what you actually write. Measure the difference.
Related case studies
Content Lead
Reverse-Engineering a Competitor's Brand Voice to Find Whitespace
We analyzed 60+ published pieces from three competing venture studios to map the voice landscape and find the positioning gap PyratzLabs could own.
Content Lead
Social Media Visuals at Scale: 20 LinkedIn Images in 10 Minutes
We batch-generate 20 branded LinkedIn images in 10 minutes using Grok and Gemini β replacing 30-minute-per-image Canva sessions with automated, on-brand content at scale.
Engineering Lead
Building a Decision Tree for Agent Routing β Which Agent Gets What?
We mapped how 31 AI agents across 8 teams route requests as a visual decision tree β and immediately found a gap that had existed undetected for months.
Want results like these?
Start free with your own AI team. No credit card required.