GrowReach v2 Prompt Engineering — Session Summary
Date: June 24, 2026
Duration: Single extended session
Participants: Rahul (founder, 10xers Labs) + Hermes Agent
What Was Accomplished
1. Context Building (Files 1-5)
Rahul shared 5 files to build complete understanding of GrowReach’s comment generation system:
-
File 1: Product Overview — GrowReach is an AI-powered LinkedIn engagement automation SaaS. Finds viral posts, generates personalized human-sounding comments, posts them (manual or auto mode). Pricing: 49/$69. Pre-revenue as of Feb 2026.
-
File 2: v1 Comment Generation PRD — Defined the v1 system prompt + user prompt architecture. System prompt had 3 strategies (agreeable_value_add, thought_provoking, question_based), anti-AI-detection rules, voice adaptation matrix (4 industries × 4 seniority levels). User prompt had 6 commenter inputs + 5 post inputs.
-
File 3: 262 Real Comments — Excel sheet of all comments generated by v1 over ~1 month. Analyzed every single comment for patterns, strengths, and weaknesses.
-
File 4: Commenting Voice Feature PRD — New v2 input system with 9 categories: website, target audience, content goal, content tone, content persona, content priority, emoji preference, voice brief (auto-generated from LinkedIn profile), custom DOs/DON’Ts.
-
File 5: Rahul’s Commenting Voice — Rahul’s own setup as the reference user. Founder of 10xers Labs, ex Go-Jek/Careem/Ola. Conversational tone, Data-Driven Analyst + Industry Expert + Thought Leader persona, Metrics first priority.
2. Analysis (Mine + Claude’s Peer Review)
My Independent Analysis of 262 Comments:
- 99.2% end with a question — biggest automation tell
- 85% open with “The…” — formulaic openers
- 45.8% follow same formula (Insight → Company mention → Question)
- Average 121 words — far too long for LinkedIn comments
- Only 2-3 voice profiles across 262 comments despite 16 possible combinations
- 120 comments mention “10xers” (45.8%) — account looks like marketing channel
- 63% “we” pronoun — corporate/agency voice
- 0 banned phrase violations — anti-AI rules working at per-comment level
- 72.5% contain {{0}} placeholder — later clarified as intentional (API replaces with tagged author name)
Claude’s Peer Review (File 6):
- Scored each comment on 5 dimensions (out of 5): structure diversity (1.32), length (1.71), humanness (1.81), dash compliance (1.89), tone variety (2.37)
- Overall v2-readiness: 1.74/5
- 98% are exactly 3 paragraphs — traced to v1’s paragraph formatting rules
- Root cause: “v1 had no length-variation or tone-variation control, so the model defaulted to one safe shape”
- Traced “The…” opener to v1 prompt’s example phrase “Start mid-thought: The challenge with…”
- Traced question ending to over-generalization of “put the question on its own line” instruction
3. v2 Prompt Design
Built complete v2 system prompt and user prompt based on all analysis:
6 Comment Structures (replacing v1’s 3 undifferentiated strategies):
- validate_extend (40-80 words) — Agree + add your angle
- challenge_nuance (40-90 words) — Surface hidden tradeoff
- share_experience (50-100 words) — Brief personal anecdote
- ask_explore (40-80 words) — Insight + genuine question
- direct_observation (20-60 words) — Punchy one-liner, no company, no question
- casual_react (15-50 words) — Very short human reaction
Key Changes from v1 → v2:
| v1 Problem | v2 Solution |
|---|---|
| 99% end with question | Question is one of 6 engagement options |
| 85% open with “The” | Banned “The point…” pattern, varied openers per structure |
| 98% are 3 paragraphs | 1-2 max for most structures, single sentence allowed |
| 121 words average | 15-100 words depending on structure |
| No example phrases | Removed all literal examples (AI was copying them as templates) |
| Em dashes encouraged | Hard ban (em/en/hyphen) |
| No typo control | Conditional intentional typos per user preference |
| 6 commenter inputs | 9+ input categories including voice brief, tone, persona, priority, audience, goals |
| No structure variety | 6 distinct structures with different lengths, paragraphs, openers, closes |
| ”We” pronoun dominance | Kept at user preference (Rahul uses “we” deliberately) |
Content Priority → Length Mapping:
- Authenticity only → structures 5, 6 (shortest)
- Authenticity first → structures 3, 5, 6
- Balance → any structure
- Metrics first → structures 1, 2, 4
- Performance only → structures 1, 2, 4 (longer, stronger hooks)
Custom Instructions Weighting:
- DON’Ts = HIGH weight (always obey unless conflicts with system prompt)
- DOs = LOW weight (preferences, can be ignored if they’d make comment robotic)
4. Backend Variables
Commenter Persona:
{{.Persona.FirstName}}{{.Persona.Role}}at{{.Persona.Company}}{{.Persona.Industry}}{{.Persona.DomainExpertise}}{{.Persona.YearOfExperience}}
Commenting Voice:
{{.CommentingStrategy.WebsiteUrl}}{{.CommentingStrategy.VoiceBrief}}— HIGH weight, critical input{{.CommentingStrategy.ContentTone}}— single-select{{.CommentingStrategy.ContentPersona}}— multi-select{{.CommentingStrategy.ContentPriority}}— single-select{{.CommentingStrategy.TargetAudience}}— multi-select{{.CommentingStrategy.ContentGoal}}— multi-select{{.CommentingStrategy.UseEmoji}}— Yes/No{{.CommentingStrategy.ThingsToInclude}}— custom DOs (LOW weight){{.CommentingStrategy.ThingsToAvoid}}— custom DON’Ts (HIGH weight)
Post Details:
{{.Post.Author.Name}}— first name only (backend handles){{.Post.Author.Title}}— needs to be wired up by dev{{.Post.Author.Company}}— needs to be wired up by dev{{.Post.Text}}— full post content
Omitted Variables (intentionally not used):
{{.LengthTarget}}— AI picks length based on chosen structure{{.OpenerType}}— AI picks opener based on chosen structure{{.EndWithQuestion}}— AI decides based on chosen structure{{.Post.Hashtags}}— obsolete on LinkedIn
JSON Output Format:
{
"comment": "comment text with \\n\\n for paragraph breaks",
"strategy_name": "one of: validate_extend, challenge_nuance, share_experience, ask_explore, direct_observation, casual_react",
"strategy_used": "same value as strategy_name",
"voice_profile": "short stable tag, e.g. 'senior AI founder, direct and analytical'",
"voice_description": "brief note on voice adaptation for this comment",
"word_count": 67
}5. Action Items for Developers
-
Wire up
{{.Post.Author.Title}}and{{.Post.Author.Company}}— these variables are in the user prompt template but were omitted from the backend variable list by mistake. The AI needs these to contextualize the comment for the post author. -
Remove
{{.LengthTarget}},{{.OpenerType}},{{.EndWithQuestion}}from the backend logic — these are no longer needed. The AI picks structure, length, and opener intelligently from the system prompt. -
Verify
{{.Post.Author.Name}}sends first name only — the v1 prompt specified “only give the model the 1st name.” The backend should handle this. -
Confirm
{{0}}placeholder handling — the API replaces{{0}}with a tagged link to the post author. The AI uses{{0}}naturally where it wants to address the author. Confirm this is still working in v2. -
Test with Gemma 4 via Ollama — the v2 system prompt is 14,253 characters. Consider architectural optimizations (see architecture options in separate section).
-
Roll out, observe comments, iterate to v3 — collect v2 comments, run same analysis methodology, compare against v1 baseline scores, identify remaining patterns, adjust.
Files in This Repo
| File | Description |
|---|---|
v2-system-prompt.md | Complete v2 system prompt (14,476 chars) |
v2-user-prompt.md | Complete v2 user prompt template (2,841 chars) |
backend-variables.md | Backend variable reference |
session-summary.md | This file — full session summary for sharing |