Systems Lab

Agent skill

psp-construct

Step-by-step construction of a Pain Signal Profile for a specific ICP segment.

activeSelf-containedDeclared tools617 words

Filed under Prospecting and list building.

From cmj-hub/claude-psp · 5 skills · 2 · pushed 2026-09-09

What it does when it runs

Step-by-step construction of a Pain Signal Profile for a specific ICP segment. Walks operator through the 5 components (signal, pain, timing, role, vocabulary), validates each, and produces a structured PSP doc. Loaded by the main psp skill when the user wants to build a PSP from scratch.

Read from the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
  • Read
  • Write
  • Grep
  • -
  • WebFetch
Actions present in the files
network

Ask about psp-construct

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/cmj-hub/claude-psp.git /tmp/claude-psp
git -C /tmp/claude-psp sparse-checkout set "skills/psp-construct"
mkdir -p ~/.claude/skills/psp-construct
cp -R "/tmp/claude-psp/skills/psp-construct/." ~/.claude/skills/psp-construct/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

Or take the whole library

This repo ships a .claude-plugin manifest, so Claude Code can install all 5 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.

/plugin marketplace add cmj-hub/claude-psp
/plugin

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from cmj-hub/claude-psp/blob/970cb1702ffdf35663b81946f64f46aa30507cf5/skills/psp-construct/SKILL.md, which is licensed MIT (skill frontmatter). 617 words, 19 headings.

PSP Construct — sub-skill

Loaded by psp when the user wants to build a complete PSP for a specific ICP segment.

Activation

The main psp skill routes here on:

  • "Build a PSP for..."
  • "Construct a Pain Signal Profile for..."
  • "Walk me through a PSP for..."

Workflow

Step 1 — Lock the ICP segment

Ask the user to be specific. Push back on broad ICPs.

"B2B SaaS" is too broad. Try one of these shapes:

  • "Series-B SaaS, $20-50M ARR, with a PLG motion"
  • "DevTools companies with >50 engineers and an OSS community"
  • "Bootstrapped agencies, 5-15 employees, productized service"

Which segment?

Step 2 — Hunt signals

For the segment, surface 5-10 candidate signals. Patterns:

  • Hiring signals: Specific role open ≤30 days
  • Funding signals: Round announced ≤30 days
  • Product signals: New tier / launch / pricing change ≤45 days
  • Leadership signals: New CMO / CRO / CFO / Head-of-X ≤60 days
  • Content signals: Recent podcast / panel / public talk on the topic
  • Pivot signals: Website hero / positioning change ≤14 days

If WebFetch is available, demo-pull recent LinkedIn job posts or recent funding news for one example company in the segment.

Step 3 — Map signal → pain for top 3

For each of the top 3 signals, ask: "If this happened, what is the operator at that company feeling at 11am on Tuesday?"

Validate each pain:

  • Specific operational moment (not abstract)
  • Phrased as what they feel, not what you sell
  • Uses their language (not category jargon)

Step 4 — Anchor timing

For each pain, identify the 90-day trigger:

  • New exec → 90-day plan in motion
  • Budget cycle → planning/fiscal-new-year window
  • Obvious failure → quarter miss, churn spike, launch flop

If no trigger, the PSP isn't time-anchored — push back.

Step 5 — Identify felt-pain role

Who in the org feels the pain at 11am Tuesday?

Note: this is often a layer below the buying authority. The demand-gen lead feels pipeline-gap pain; the CMO authorizes the spend. Outreach hits the felt-pain role.

Step 6 — Mine vocabulary

Read 5-10 sources of recipient-written content:

  • Their job posts (often most revealing)
  • Their team's LinkedIn comments
  • Their conference talks
  • Their AMA / podcast appearances
  • Their public sales/marketing internal-system tweets

Extract 8-12 phrases they actually use about this pain.

Step 7 — Output

# PSP — <ICP segment>

**ICP precision check:** <one sentence on why this segment is specific enough>

## Signal
<Top signal — verifiable, recent, hunting-ready>

## Pain
<What the signal implies at 11am Tuesday — in their language>

## Timing
**Trigger:** <new-exec / budget-cycle / obvious-failure>
**Why now:** <one sentence>

## Role (felt-pain holder)
<Specific role title; not the buying authority>

## Vocabulary
<8-12 phrases they actually use>
- "<phrase 1>"
- "<phrase 2>"
- ...

## Top 5 signals to hunt operationally
1. <Signal source + cadence>
2. <Signal source + cadence>
3. <Signal source + cadence>
4. <Signal source + cadence>
5. <Signal source + cadence>

## Plugs into
- claude-cold-email — first-line opener uses Signal verbatim
- claude-evp — EVP must speak to Pain in their Vocabulary
- Outbound program 30-point audit — PSP is the messaging anchor

Step 8 — Stress test

Ask the user: "Which of these are weakest? I can re-pull or refine any block." Most common weak spots:

  • Pain too abstract: rewrite using their vocabulary, force the 11am-Tuesday moment
  • Signal too stale: shorten the recency window
  • Vocabulary borrowed from category: pull more sources of their actual writing

Need help setting it up?

This page tells you what psp-construct does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.