Help us improve
Share bugs, ideas, or general feedback.
From gtmvp-gtm-agents
Use when assessing the structural attractiveness of a market or sub-niche before committing strategy or capital. Outputs Porter's Five Forces analysis with numerical scores per force, market concentration assessment, and ranked strategic implications. Cited by /porters-scan slash command and the brand-strategist agent's market-context section.
npx claudepluginhub gtmvp/gtmvp-gtm-agents --plugin gtmvp-gtm-agentsHow this skill is triggered — by the user, by Claude, or both
Slash command
/gtmvp-gtm-agents:porters-five-forcesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A market is attractive when the five forces are weak (low competitive pressure). When forces are strong, profits get squeezed and even good companies struggle. This skill produces a scored, evidence-anchored five-forces analysis suitable for a strategy memo.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Breaks plans, specs, or PRDs into thin vertical-slice issues on the project issue tracker using tracer bullets. Useful for converting high-level work into grabbable implementation tickets.
Share bugs, ideas, or general feedback.
A market is attractive when the five forces are weak (low competitive pressure). When forces are strong, profits get squeezed and even good companies struggle. This skill produces a scored, evidence-anchored five-forces analysis suitable for a strategy memo.
Don't use it for tactical campaign decisions. This is structural analysis, not channel optimization.
competitor-discovery-cot first if you don't have a defensible set)If any of these are unknown, mark them in the output's unknowns array — do not invent.
How easily can a new competitor enter and capture share?
Scoring drivers (raise = high threat):
Scoring drivers (lower = low threat):
How much can input providers (vendors, labor, infrastructure) dictate terms?
High supplier power signals:
How much can customers dictate price and terms?
High buyer power signals:
What alternative solutions solve the same job-to-be-done?
High substitute threat signals:
How intense is rivalry among existing competitors?
High rivalry signals:
{
"threatOfNewEntrants": {
"level": "low | medium | high",
"score": 6.5,
"factors": ["Specific factor with evidence", "..."],
"barriers": ["Existing barriers to entry in this market"],
"opportunities": ["How the brand can strengthen barriers"]
},
"bargainingPowerOfSuppliers": {
"level": "low | medium | high",
"score": 5.0,
"factors": ["..."],
"keySuppliers": ["Types of critical suppliers"],
"risks": ["Supply chain risks"]
},
"bargainingPowerOfBuyers": {
"level": "low | medium | high",
"score": 7.0,
"factors": ["..."],
"buyerSegments": ["Key customer segments"],
"priceSensitivity": "Low | Medium | High — with reasoning"
},
"threatOfSubstitutes": {
"level": "low | medium | high",
"score": 4.0,
"substitutes": ["Alternative 1", "Alternative 2"],
"switchingCosts": "Low | Medium | High — with reasoning",
"factors": ["..."]
},
"competitiveRivalry": {
"level": "low | medium | high",
"score": 8.0,
"numberOfCompetitors": 12,
"marketConcentration": "Fragmented | Moderately concentrated | Highly concentrated",
"competitionFactors": ["Key competitive factors"],
"differentiationLevel": "Low | Medium | High — with reasoning"
},
"overallAttractiveness": {
"score": 6.2,
"summary": "One-paragraph assessment",
"strategicImplications": [
"Strategic recommendation 1 — what to do given the forces",
"Strategic recommendation 2",
"Strategic recommendation 3"
]
},
"responsePackage": {
"selectedResponses": ["response_id_1", "response_id_2"],
"coverageMap": {
"threatOfNewEntrants": ["response_id_1"],
"bargainingPowerOfBuyers": ["response_id_1", "response_id_2"],
"competitiveRivalry": ["response_id_2"]
},
"totalCost": 28000,
"uncoveredForces": [],
"singleCoverRisks": ["threatOfNewEntrants"],
"solverStatus": "optimal"
},
"confidence": 0.75,
"unknowns": ["What you couldn't assess due to missing data"]
}
After scoring the five forces, generate N candidate strategic responses (typically 5-10). Each response:
Use the set-cover template from skills/solver-patterns (Template 4) to find the min-cost package of responses that brings every force scored ≥ threshold (default: ≥ 6.0, i.e. "medium-high" or above) below that threshold.
Solver flow (per skills/solver-patterns §4 and skills/gtm-output-schemas §8):
clear_model — fresh sessionadd_item calls per Template 4 (set-cover, min-cost variant — no target_size cap)solve_model with 10s timeoutclear_model — cleanupThis closes the loop from "here's your five-forces score" to "here's the cheapest package of strategic moves that addresses every dangerous force."
For overall attractiveness, the math is inverted:
unknowns array is mandatory. What you can't assess is information.