| name | forbotsake-icp |
| description | Stage 4: RESEARCH (audience). Builds a deep audience profile by combining your strategy.md
ICP with real web research on communities, content preferences, and daily workflows.
Produces icp-profile.md with a persona narrative, daily journey map, pain points,
communities, and content preferences.
Use when: "who is my audience", "audience research", "ICP deep dive", "persona",
"where does my user hang out", "community research", "understand my customer",
"audience profile", "buyer persona".
Proactively invoke when the user wants to understand their audience better or
is unsure where to find their target users online.
|
/forbotsake-icp
The audience research step. You can't write for someone you don't understand.
Preamble
FORBOTSAKE_HOME="${FORBOTSAKE_HOME:-$HOME/.forbotsake}"
mkdir -p "$FORBOTSAKE_HOME"
_FBS_ROOT=""
for _FBS_CANDIDATE in "$HOME/.codex/skills/forbotsake" "$HOME/.agents/skills/forbotsake"; do
[ -d "$_FBS_CANDIDATE" ] && _FBS_ROOT="$_FBS_CANDIDATE" && break
done
if [ -z "$_FBS_ROOT" ]; then
echo "WARNING: forbotsake not found. Install: bash <(curl -fsSL https://raw.githubusercontent.com/forbotsake/forbotsake/main/bin/install.sh)"
fi
_UPD=""
[ -n "$_FBS_ROOT" ] && [ -x "$_FBS_ROOT/bin/forbotsake-update-check" ] && _UPD=$("$_FBS_ROOT/bin/forbotsake-update-check" 2>/dev/null || true)
[ -n "$_UPD" ] && echo "$_UPD" || true
_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
echo "BRANCH: $_BRANCH"
if [ -f strategy.md ]; then
echo "STRATEGY_FOUND: yes"
echo "STRATEGY_FILE: strategy.md"
head -30 strategy.md
elif [ -f forbotsake-strategy.md ]; then
echo "STRATEGY_FOUND: yes"
echo "STRATEGY_FILE: forbotsake-strategy.md"
head -30 forbotsake-strategy.md
else
echo "STRATEGY_FOUND: no"
fi
if [ -f icp-profile.md ]; then
echo "EXISTING_PROFILE: yes"
head -5 icp-profile.md
else
echo "EXISTING_PROFILE: no"
fi
if [ -f competitor-analysis.md ]; then
echo "COMPETITOR_ANALYSIS: yes"
else
echo "COMPETITOR_ANALYSIS: no"
fi
_SESSION_FILE="$FORBOTSAKE_HOME/icp-$(basename "$(git rev-parse --show-toplevel 2>/dev/null || pwd)").json"
if [ -f "$_SESSION_FILE" ]; then
echo
If output shows UPGRADE_AVAILABLE <old> <new>: read the forbotsake-upgrade SKILL.md
at $_FBS_ROOT/forbotsake-upgrade/SKILL.md (where _FBS_ROOT is the variable already
resolved in the preamble bash above) and follow the "Inline upgrade flow" section Step 1
only. If Step 1 results in "Yes" or "Always" (proceed with upgrade), continue through
Steps 2-7 of the inline flow. If Step 1 results in "Not now" or "Never" (declined),
skip Steps 2-7 entirely and continue with this skill immediately.
If output shows JUST_UPGRADED <old> <new>: tell user
"Running forbotsake v{new} (just updated from v{old})!" and continue.
If STRATEGY_FOUND is no:
"No strategy.md found. I need at least a basic ICP to research. Run /forbotsake-marketing-start
first, or tell me: who is your target user? (Title, industry, what problem you solve for them.)"
Ask the user directly in conversation. If they provide enough detail inline, continue. If not, stop and direct them to /forbotsake-marketing-start.
If EXISTING_PROFILE is yes: "Found existing icp-profile.md. Want to update it with new research or start fresh?"
Ask the user directly in conversation with options: A) Update existing, B) Start fresh.
If RESUME_AVAILABLE is yes: "Found a previous ICP research session in progress. Resume where you left off?"
Ask the user directly in conversation with options: A) Resume, B) Start fresh.
If COMPETITOR_ANALYSIS is yes, read it. Competitor audience data enriches the persona.
Phase 1: Extract the Starting ICP
Read strategy.md and extract:
- Person (name/archetype from Q2)
- Title/Role
- Pain point
- Current solution
- Trigger event
- Top channels
Present what you know:
"From your strategy, your ICP is: [person summary]. Title: [title]. Their pain is [pain].
They currently use [current solution] and would switch when [trigger event].
I'm going to research where this person actually lives online, what they read,
and how they think. But first, 3 questions to sharpen the picture."
Phase 2: Three Deepening Questions
Ask these ONE AT A TIME via direct conversation with the user. Each answer builds on the previous.
Q1: Daily Workflow
"Walk me through [ICP name]'s workday. Not the idealized version — the real one.
- What's the first tool they open in the morning?
- What takes up most of their time (even if it shouldn't)?
- What's the task they keep pushing to 'later' because it's tedious?
- When in their day would they encounter the problem [product] solves?
If you're not sure, give me your best guess. I'll validate it with research."
Push for specificity. "They use various tools" is not useful. "They open Slack, then Jira, then spend 2 hours in meetings before they can write code" is useful.
Save to session:
echo '{"q": 1, "question": "daily_workflow", "answer": "USER_ANSWER"}' >> "$_SESSION_FILE"
Q2: Biggest Frustration
"What is [ICP name]'s single biggest professional frustration right now?
Not the problem your product solves (you already told me that). The CONTEXT
around it. The thing that makes the problem worse. The reason they haven't
fixed it yet.
Example: The problem might be 'slow deployments.' The frustration is
'I have to babysit a 45-minute CI pipeline because it fails silently,
and my manager measures me on deploy frequency.'
The frustration is where the emotional energy lives. That's what makes
them click on your content."
Save to session:
echo '{"q": 2, "question": "biggest_frustration", "answer": "USER_ANSWER"}' >> "$_SESSION_FILE"
Q3: What They'd Pay to Automate
"If [ICP name] could wave a magic wand and automate ONE thing in their job,
what would it be? And how much time/money would they save per week?
This doesn't have to be what your product does. It tells me what they VALUE —
which tells me how to frame your product in terms they care about.
Bonus: what have they already tried to automate it? (Scripts, tools, hiring someone?)"
Save to session:
echo '{"q": 3, "question": "would_pay_to_automate", "answer": "USER_ANSWER"}' >> "$_SESSION_FILE"
Phase 3: Web Research — Communities and Content
Now research where this person actually exists online. Use WebSearch for all queries.
3a: Community Discovery
Search for:
- "[ICP role] community" (e.g., "devops engineer community")
- "[ICP role] forum reddit" (e.g., "devops engineer forum reddit")
- "[ICP role] slack discord community" (e.g., "devops engineer slack discord")
- "[ICP role] [industry] newsletter" (e.g., "devops SaaS newsletter")
- "[ICP pain point] discussion" (e.g., "slow CI pipeline discussion")
For each community found, note:
- Platform (Reddit, Slack, Discord, Forum, etc.)
- Name (r/devops, DevOps Chat Slack, etc.)
- Size/activity (if discoverable)
- Relevance (how closely does it match the ICP?)
3b: Content Consumption Research
Search for:
- "[ICP role] must-read blogs" or "[ICP role] favorite blogs"
- "[ICP role] podcast" (e.g., "devops podcast")
- "[ICP role] youtube channels"
- "[ICP role] twitter accounts to follow" or "[ICP role] linkedin influencers"
- "[ICP role] conference" (e.g., "devops conference 2025 2026")
For each content source found, note:
- Type (blog, podcast, YouTube, newsletter, conference)
- Name
- Why it matters (what need does it serve for the ICP?)
3c: Language and Terminology Research
Search for:
- "[ICP pain point] site:reddit.com" — How do real users describe the problem?
- "[product category] review" — What language do users use in reviews?
- "[ICP role] day in the life" — How do they describe their work?
Capture exact phrases and vocabulary the ICP uses. This feeds messaging later.
Phase 4: Synthesize and Present
Present research findings to the user before writing the file:
"Here's what I found about [ICP name]'s world:
Communities they're in: [top 5 communities with brief description]
Content they consume: [top 5 content sources]
How they talk about the problem: [3-5 actual phrases from research]
Surprising finding: [something unexpected from the research]
Does this match your experience? Anything feel off?"
Ask the user directly in conversation. Their corrections are more valuable than the research.
Save corrections:
echo '{"phase": "synthesis_feedback", "corrections": "USER_RESPONSE"}' >> "$_SESSION_FILE"
Phase 5: Write icp-profile.md
Write icp-profile.md to the project root with this schema:
---
schema_version: 1
generated_by: forbotsake
generated_at: {ISO timestamp}
based_on_strategy: {yes/no}
---
# ICP Profile: {persona name/archetype}
Generated by /forbotsake-icp on {date}
## Persona Narrative
{A 3-5 paragraph narrative that reads like a character sketch. NOT a bullet list.
Write it in present tense, third person. Make it feel like a real person.
Example: "Alex is a senior backend engineer at a Series B fintech startup. She's been
there 18 months — long enough to own the deployment pipeline, not long enough to have
the political capital to rewrite it. Her morning starts with Slack notifications from
overnight failures..."}
## Daily Journey Map
| Time | Activity | Tools | Emotional State | Opportunity |
|------|----------|-------|----------------|-------------|
| {time} | {what they're doing} | {tools/platforms} | {how they feel} | {where your product fits} |
| ... | ... | ... | ... | ... |
## Pain Points (Ranked)
1. **{Pain point 1}** — {description, with quote from research if available}
2. **{Pain point 2}** — {description}
3. **{Pain point 3}** — {description}
## What They'd Pay For
- **Automation wish:** {from Q3}
- **Time saved:** {estimated from Q3}
- **Value frame:** {how to position your product in terms they value}
## Communities
| Community | Platform | Size/Activity | Relevance | Notes |
|-----------|----------|--------------|-----------|-------|
| {name} | {platform} | {size} | {High/Medium/Low} | {how to participate without spamming} |
| ... | ... | ... | ... | ... |
## Content Preferences
| Source | Type | Why They Use It | Your Angle |
|--------|------|----------------|------------|
| {name} | {blog/podcast/newsletter/etc.} | {what need it serves} | {how you could contribute or replicate} |
| ... | ... | ... | ... |
## Language & Vocabulary
Words and phrases this person actually uses when talking about the problem:
- "{phrase 1}" — heard in {context}
- "{phrase 2}" — heard in {context}
- "{phrase 3}" — heard in {context}
**Words to avoid** (sounds like marketing, not like them):
- {word/phrase to avoid} — say {alternative} instead
- ...
## Trigger Events
Moments when this person actively searches for a solution:
1. {Trigger 1} — {when/why this happens}
2. {Trigger 2} — {when/why this happens}
3. {Trigger 3} — {when/why this happens}
## Open Questions
{Things you couldn't validate with web research alone. Suggest: "Talk to 3 people who
match this profile. Ask them: [specific questions]"}
Phase 6: Self-Test
After writing icp-profile.md, verify:
- Does the persona narrative sound like a real person, not a marketing document?
- Are communities real and discoverable (not made up)?
- Is the language section based on actual research, not assumptions?
- Does the daily journey map include specific tools and times, not vague buckets?
- Are there at least 3 communities and 3 content sources with real names?
If any check fails, revise before presenting.
Phase 7: Next Steps
Tell the user:
"Your ICP profile is ready in icp-profile.md.
Next step: /forbotsake-content-plan to build a content calendar that matches
where this person hangs out, what they read, and how they talk about the problem.
Pro tip: The 'Language & Vocabulary' section is gold. Use those exact phrases
in your content headlines. Your ICP will feel like you're reading their mind."
Cleanup
Remove the session file on successful completion:
rm -f "$_SESSION_FILE" 2>/dev/null