// reference management
ICP Refresh
/ttm-icp-refresh
Update ICP.md from new customer data including calls, reviews, and feedback. Use when ideal customer profile needs updating from fresh data.
Overview
Updates .taketomarket/ICP.md — the Ideal Customer Profile reference — from fresh customer data such as call transcripts, reviews, feedback, and survey results. Run it with ttm-icp-refresh when your ideal customer profile needs updating from new evidence.
The skill accepts new customer data, analyzes patterns against the current ICP profiles, proposes updates with evidence citations, validates that changes do not conflict with POSITIONING.md, and writes the result to ICP.md behind a human approval gate. It runs as a single-pass workflow.
Why it matters: ICPs drift as your real customer base shifts away from who you thought you were selling to. If your last few campaigns under-performed and you cannot explain why, the ICP doc is usually months stale. A refresh is cheap insurance against marketing to a customer who no longer exists.
How it works
Step 0: First-run inline education
Read .taketomarket/CONFIG.md. Parse first_run_seen (object) and inline_education (boolean, default true).
If inline_education is false: skip this step. Else if first_run_seen.ttm-icp-refresh is not true, print the explainer below verbatim, then mark this skill as seen:
node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-icp-refreshUse this exact check (bash) to decide whether to print: node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-icp-refresh --raw — the JSON seen field is true once the explainer has run before.
This skill is backed by the ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs script, which manages the first-run state used by the education gate above.
Explainer for /ttm-icp-refresh
/ttm-icp-refresh updates .taketomarket/ICP.md — the Ideal Customer Profile reference. It asks updated questions about the audience: their jobs, pains, sophistication level, channels, and the exact words they use. The new ICP propagates to every brief written afterward.
Why it matters: ICPs drift as your real customer base shifts away from who you thought you were selling to. If your last three campaigns under-performed and you can't explain why, the ICP doc is usually six months stale. Refresh is cheap insurance against marketing to a customer who no longer exists.
(Canonical source: references/inline-education-blurbs.md. Embedded verbatim because workflows do not @-resolve files at runtime.)
Purpose
Update ICP.md from new customer data (calls, reviews, feedback, surveys). Validates all changes against POSITIONING.md target audience field before writing. Single-pass workflow per D-06.
Required reading
@${CLAUDE_PLUGIN_ROOT}/references/context-loading.md@${CLAUDE_PLUGIN_ROOT}/templates/reference-files/icp.md
Constraints
Process
Text-Mode Detection
Text mode (--text flag): Set TEXT_MODE=true if --text is present in $ARGUMENTS or if the runtime is not Claude Code. When TEXT_MODE is active, replace every AskUserQuestion call with a plain-text numbered list.
Detection:
if echo "$ARGUMENTS" | grep -q -- '--text'; then TEXT_MODE=true; fiIf AskUserQuestion tool is not available in the current runtime, set TEXT_MODE=true. When TEXT_MODE is active, replace each AskUserQuestion with a plain-text numbered list.
Step 1: Load Context
takeToMarket > LOADING CONTEXTLoad Tier 1 summaries from all 9 reference files (lines 1 to <!-- END_SUMMARY -->):
.taketomarket/POSITIONING.md.taketomarket/BRAND.md.taketomarket/ICP.md.taketomarket/CHANNELS.md.taketomarket/STATE.md(frontmatter only).taketomarket/CALENDAR.md.taketomarket/COMPETITORS.md.taketomarket/METRICS.md.taketomarket/LEARNINGS.md
Load Tier 2 (full content) for the file being refreshed:
.taketomarket/ICP.md
If .taketomarket/ICP.md does not exist, error: "ICP.md not found. Run /ttm-init first to set up your marketing system." Exit.
Parse the current ICP.md into structured sections:
CURRENT_PRIMARY_SEGMENT— from## Primary SegmentCURRENT_JTBD— from## Jobs-to-Be-Donetable rowsCURRENT_PAINS— from### Pain Pointstable rowsCURRENT_TRIGGERS— from### Buying TriggersCURRENT_ANTI_ICP— from## Anti-ICP Profiletable rowsCURRENT_LANGUAGE— from## Customer Language Librarytable rows
Step 2: Present Current State and Gather Updates
Display current ICP.md sections to the user:
takeToMarket > ICP REFRESH
Primary Segment: ${CURRENT_PRIMARY_SEGMENT summary}
Jobs-to-Be-Done: ${count} entries
Pain Points: ${count} entries
Anti-ICP: ${count} entries
Customer Language: ${count} phrasesAsk user via AskUserQuestion (or text-mode freeform) — collect responses:
Question 1:
- header:
"New Customer Data" - question: "What new customer data do you have? Paste call notes, reviews, feedback, survey results, or describe your findings."
Question 2:
- header:
"New Jobs-to-Be-Done or Pain Points" - question: "Any new JTBD or pain points discovered from this data? Describe each, or type 'none'."
Question 3:
- header:
"New Trigger Events" - question: "Any new buying trigger events identified? Describe each, or type 'none'."
Question 4:
- header:
"Customer Language" - question: "New customer language phrases to add to the library? Provide exact quotes with context and source, or type 'none'."
Question 5:
- header:
"Anti-ICP Updates" - question: "Any new segments to add to anti-ICP? Describe people who are NOT your target and why, or type 'none'."
If Question 1 is "none" AND all other answers are "none": display "No new data provided. ICP.md is unchanged." Exit.
Step 3: Validate Against Positioning
Load the target audience, primary differentiator, and must-not-say terms from the POSITIONING.md Tier 1 summary (already loaded in Step 1).
For each proposed change, validate:
New segments/JTBD:
- Check new segment descriptions align with POSITIONING.md target audience definition
- Check new JTBD do not describe jobs outside the positioning scope
New customer language:
- Check phrases do not include must-not-say terms from POSITIONING.md
- Check language aligns with the positioning category and differentiator
Anti-ICP additions:
- Check anti-ICP entries do not exclude groups that overlap with the POSITIONING.md target audience (would create a contradiction)
If conflict detected:
takeToMarket > POSITIONING CONFLICT DETECTED
Conflict: [specific description]
Affected field: [which ICP.md section]
POSITIONING.md reference: [the conflicting positioning element]
Please resolve this conflict before proceeding.
Recommendation: Adjust the proposed change, or run /ttm-positioning-shift if the
positioning itself needs updating.Ask user to revise the conflicting item or skip it.
Step 4: Write Updated ICP.md
Analyze raw customer data from Question 1 alongside specific additions from Questions 2-5. Extract structured insights and apply to ICP.md sections:
- New JTBD: Add rows to
## Jobs-to-Be-Donetable (job, priority, current solution) - New pain points: Add rows to
### Pain Pointstable (pain, severity, frequency) - New triggers: Add to
### Buying Triggerssection - New anti-ICP entries: Add rows to
## Anti-ICP Profiletable (characteristic, reason) - New language phrases: Add rows to
## Customer Language Librarytable (context, phrase, source)
Write the updated file via the Write tool.
Step 5: Completion Banner
========================================
takeToMarket > ICP REFRESH COMPLETE
========================================
Updated sections:
- [list of changed sections, e.g., "Pain Points (2 added)"]
- [e.g., "Customer Language (4 new phrases)"]
- [e.g., "Anti-ICP (1 new exclusion)"]
Data source: [brief description of input data type]
Next: Run /ttm-positioning-check to verify alignment across recent assetsSuccess criteria
- Tier 1 summaries loaded from all 9 reference files
- Tier 2 full content loaded for ICP.md
- Current ICP state displayed to user
- User provided new customer data or specific updates
- All proposed changes validated against POSITIONING.md target audience
- Conflicts flagged and resolved before writing
- ICP.md updated with new entries and preserved structure
- Summary markers (
<!-- _SUMMARY -->/<!-- END_SUMMARY -->) preserved - Completion banner displayed with changed sections
What if this doesn't fit?
Looks like /ttm-icp-refresh can't do that yet.
- Want a new skill?
/ttm-request-skill - Existing skill needs work?
/ttm-improve-skill