/linkedin-job-post-to-buyer-pain-map
Takes pasted LinkedIn job posts or hiring descriptions and converts them into a structured buyer pain map with inferred pains, capability gaps, buy-vs-build signal, account priority scores, and suggested outreach angles. Use when asked to analyze hiring posts, decode job
$ npx -y skills add Varnan-Tech/opendirectory --skill linkedin-job-post-to-buyer-pain-map --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/linkedin-job-post-to-buyer-pain-map
Context preview
The summary Claude sees to decide when to auto-load this skill.
Takes pasted LinkedIn job posts or hiring descriptions and converts them into a structured buyer pain map with inferred pains, capability gaps, buy-vs-build signal, account priority scores, and suggested outreach angles. Use when asked to analyze hiring posts, decode job
SKILL.md
linkedin-job-post-to-buyer-pain-map.SKILL.mdname: linkedin-job-post-to-buyer-pain-map
description: Takes pasted LinkedIn job posts or hiring descriptions and converts them into a structured buyer pain map with inferred pains, capability gaps, buy-vs-build signal, account priority scores, and suggested outreach angles. Use when asked to analyze hiring posts, decode job descriptions for buyer intent, build a pain map from job listings, extract GTM signals from hiring activity, or prioritize accounts based on hiring data. Trigger when a user says "analyze these job posts", "what pain does this hiring signal", "build a pain map from these listings", "decode this job description", or "score these accounts from their hiring".
author: ajaycodesitbetter
version: 1.0.0
LinkedIn Job Post to Buyer Pain Map
Take LinkedIn job posts. Decode them into a structured buyer pain map with scores, pains, and outreach angles.
---
**Critical rule:** Every inferred pain must cite specific language from the job description that supports it. Never hallucinate pains that are not grounded in the text. If a post is too generic to infer pain, say so explicitly and assign a low signal strength score.
**Ethical rule:** Do not infer personal attributes or protected characteristics about candidates. Focus strictly on company-level operational pain and organizational needs.
---
Step 1: Setup Check
Confirm required env vars:
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"**If GEMINI_API_KEY is missing:** Stop. Tell the user: "GEMINI_API_KEY is required. Get it at aistudio.google.com. Add it to your .env file."
---
Step 2: Collect Inputs
The skill needs 3 required inputs. Collect them before proceeding.
2a: Product Brief
Ask: "Describe your product in 2-5 sentences. What do you do, what is your core value prop, and who do you target?"
**If the user already included this in their prompt:** Extract it. Confirm: "Product brief captured: [summary]."
2b: ICP Description
Ask: "Describe your ideal customer profile in 2-6 bullets: industries, company sizes, roles you sell to, tech stack hints."
**If the user already included this in their prompt:** Extract it. Confirm: "ICP captured: [summary]."
2c: Hiring Posts
Ask: "Paste the job descriptions you want analyzed. For each post, include the company name, job title, and the full description text. You can paste 1-15 posts."
**Accepted formats:**
- Raw pasted text with company name and job title clearly labeled
- Structured JSON objects with fields: `company_name`, `job_title`, `location` (optional), `seniority` (optional), `team_or_function` (optional), `job_description_text`, `job_url` (optional)
- Multiple posts separated by clear delimiters (--- or numbered)
**If any field is missing:** Infer what you can from the description text. If company_name or job_description_text is missing, ask for it before proceeding.
2d: Optional Inputs
If the user provides any of these, capture them:
- `account_notes`: additional context per company (funding, tech stack, known tools, contacts)
- `focus_dimension`: "pipeline" (bias toward scoring and prioritization), "positioning" (bias toward messaging angles), or "both" (default)
---
Step 3: Extract Signals
For each job post, parse and extract:
1. **Team / function:** Which team is this role on? (GTM, Product, Infra, Data, RevOps, CS, Engineering, etc.) 2. **Seniority:** IC, Senior IC, Manager, Director, VP, C-level 3. **Responsibilities emphasis:** Classify the dominant mode:
- Fire-fighting: "stabilize", "fix", "reduce downtime", "unblock"
- Building new: "build from scratch", "0→1", "greenfield", "design and implement"
- Optimizing: "scale", "optimize", "improve efficiency", "automate"
- Replacing: "replace legacy", "migrate from", "modernize"
4. **Requirement language:** Note keywords that signal intent: "first X hire", "critical role", "immediate", "must have" 5. **Tool / stack hints:** Any references to specific tools, platforms, or technology categories that overlap with the user's product area
**Group by company.** If multiple posts come from the same company, group their signals together.
State: "Extracted signals from X posts across Y companies."
---
Step 4: Score with the LLM
Read `references/scoring-rubric.md` for the full scoring model.
Build the LLM request:
cat > /tmp/pain-map-score-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "You are a GTM analyst who specializes in decoding hiring signals into buyer intent. For each account provided, you will score three dimensions and infer company context. Rules: (1) Every score must include a one-sentence plain-text explanation. (2) signal_strength measures how many and how specific the hiring signals are relative to the user's product area. (3) urgency measures how time-sensitive the hiring need appears. (4) icp_fit measures how closely the company matches the user's ICP description. (5) Each score is 1-10. (6) overall_score = round((0.4 * signal_strength + 0.3 * urgency + 0.3 * icp_fit) * 10). (7) Infer buy_vs_build from job language. Use EXACTLY one of these labels: 'Leaning build', 'Leaning buy', 'Hybrid (buy-and-build)', 'Unknown'. (8) Infer stage_guess from company clues: funding stage, employee count, company type. (9) Output valid JSON only."
}]
},
"contents": [{
"parts": [{
"text": "SCORING_CONTEXT_HERE"
}]
}],
"generationConfig": {
"temperature": 0.2,
"maxOutputTokens": 4096
}
}
ENDJSON
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/pain-map-score-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"Replace `SCORING_CONTEXT_HERE` with:
- The product brief and ICP description from Step 2
- The extracted signals per company from Step 3
- The
Read more
name: linkedin-job-post-to-buyer-pain-map description: Takes pasted LinkedIn job posts or hiring descriptions and converts them into a structured buyer pain map with inferred pains, capability gaps, buy-vs-build signal, account priority scores, and suggested outreach angles. Use when asked to analyze hiring posts, decode job descriptions for buyer intent, build a pain map from job listings, extract GTM signals from hiring activity, or prioritize accounts based on hiring data. Trigger when a user says "analyze these job posts", "what pain does this hiring signal", "build a pain map from these listings", "decode this job description", or "score these accounts from their hiring". author: ajaycodesitbetter version: 1.0.0
LinkedIn Job Post to Buyer Pain Map
Take LinkedIn job posts. Decode them into a structured buyer pain map with scores, pains, and outreach angles.
---
**Critical rule:** Every inferred pain must cite specific language from the job description that supports it. Never hallucinate pains that are not grounded in the text. If a post is too generic to infer pain, say so explicitly and assign a low signal strength score.
**Ethical rule:** Do not infer personal attributes or protected characteristics about candidates. Focus strictly on company-level operational pain and organizational needs.
---
Step 1: Setup Check
Confirm required env vars:
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"**If GEMINI_API_KEY is missing:** Stop. Tell the user: "GEMINI_API_KEY is required. Get it at aistudio.google.com. Add it to your .env file."
---
Step 2: Collect Inputs
The skill needs 3 required inputs. Collect them before proceeding.
2a: Product Brief
Ask: "Describe your product in 2-5 sentences. What do you do, what is your core value prop, and who do you target?"
**If the user already included this in their prompt:** Extract it. Confirm: "Product brief captured: [summary]."
2b: ICP Description
Ask: "Describe your ideal customer profile in 2-6 bullets: industries, company sizes, roles you sell to, tech stack hints."
**If the user already included this in their prompt:** Extract it. Confirm: "ICP captured: [summary]."
2c: Hiring Posts
Ask: "Paste the job descriptions you want analyzed. For each post, include the company name, job title, and the full description text. You can paste 1-15 posts."
**Accepted formats:**
- Raw pasted text with company name and job title clearly labeled
- Structured JSON objects with fields: `company_name`, `job_title`, `location` (optional), `seniority` (optional), `team_or_function` (optional), `job_description_text`, `job_url` (optional)
- Multiple posts separated by clear delimiters (--- or numbered)
**If any field is missing:** Infer what you can from the description text. If company_name or job_description_text is missing, ask for it before proceeding.
2d: Optional Inputs
If the user provides any of these, capture them:
- `account_notes`: additional context per company (funding, tech stack, known tools, contacts)
- `focus_dimension`: "pipeline" (bias toward scoring and prioritization), "positioning" (bias toward messaging angles), or "both" (default)
---
Step 3: Extract Signals
For each job post, parse and extract:
1. **Team / function:** Which team is this role on? (GTM, Product, Infra, Data, RevOps, CS, Engineering, etc.) 2. **Seniority:** IC, Senior IC, Manager, Director, VP, C-level 3. **Responsibilities emphasis:** Classify the dominant mode:
- Fire-fighting: "stabilize", "fix", "reduce downtime", "unblock"
- Building new: "build from scratch", "0→1", "greenfield", "design and implement"
- Optimizing: "scale", "optimize", "improve efficiency", "automate"
- Replacing: "replace legacy", "migrate from", "modernize"
4. **Requirement language:** Note keywords that signal intent: "first X hire", "critical role", "immediate", "must have" 5. **Tool / stack hints:** Any references to specific tools, platforms, or technology categories that overlap with the user's product area
**Group by company.** If multiple posts come from the same company, group their signals together.
State: "Extracted signals from X posts across Y companies."
---
Step 4: Score with the LLM
Read `references/scoring-rubric.md` for the full scoring model.
Build the LLM request:
cat > /tmp/pain-map-score-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "You are a GTM analyst who specializes in decoding hiring signals into buyer intent. For each account provided, you will score three dimensions and infer company context. Rules: (1) Every score must include a one-sentence plain-text explanation. (2) signal_strength measures how many and how specific the hiring signals are relative to the user's product area. (3) urgency measures how time-sensitive the hiring need appears. (4) icp_fit measures how closely the company matches the user's ICP description. (5) Each score is 1-10. (6) overall_score = round((0.4 * signal_strength + 0.3 * urgency + 0.3 * icp_fit) * 10). (7) Infer buy_vs_build from job language. Use EXACTLY one of these labels: 'Leaning build', 'Leaning buy', 'Hybrid (buy-and-build)', 'Unknown'. (8) Infer stage_guess from company clues: funding stage, employee count, company type. (9) Output valid JSON only."
}]
},
"contents": [{
"parts": [{
"text": "SCORING_CONTEXT_HERE"
}]
}],
"generationConfig": {
"temperature": 0.2,
"maxOutputTokens": 4096
}
}
ENDJSON
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/pain-map-score-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"Replace `SCORING_CONTEXT_HERE` with:
- The product brief and ICP description from Step 2
- The extracted signals per company from Step 3
- The
AI Agent Skills built for Founders who hate Marketing
Repo: Varnan-Tech/opendirectory
Other skills on opendirectory-gtm-skills.
- /app-store-review-arbitrage
Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.
Open skill - /blog-cover-image-cli
Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.
Open skill - /brand-alchemy
World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.
Open skill - /claude-md-generator
Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing only the non-obvious build commands, conventions, and gotchas Claude Code needs.
Open skill - /cold-email-verifier
Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source Reacher engine.
Open skill - /company-radar
Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.
Open skill

